最近我正在阅读php文档,并在字符串部分找到了有趣的注释:
自PHP 5起,{$}内的函数,方法调用,静态类变量和类常量工作.但是,访问的值将被解释为定义字符串的作用域中变量的名称.使用单个花括号({})将无法访问函数或方法的返回值或类常量或静态类变量的值.
见www.php.net/manual/en/language.types.string.php
它说,我不能使用卷曲语法来获取object的方法调用返回的值.这是手动错误还是我误解了它,因为我尝试了下面的代码,它运行得很好:
<?php
class HelloWorld
{
public static function hello()
{
echo 'hello';
}
}
$a = new HelloWorld();
echo "{$a->hello()} world";
Run Code Online (Sandbox Code Playgroud) 好的,所以我尝试执行以下代码:
Run Code Online (Sandbox Code Playgroud)`#{@daemon_path} --name=#{@app_name} --command=#{@java_path} -- -jar #{jetty_jar} #{@war_path} #{random_port}` sleep(10) #give war time to error out and die if its going to `#{@daemon_path} --running --name=#{@app_name}`
变量值为:
我收到此错误(检查了 bash 中的命令,它们工作正常):
无效参数:未提供命令
用法:daemon [选项] [--] [cmd arg...]
我通过在上述命令周围添加引号来修复上述错误,如下所示:
"`#{@daemon_path} --name=#{@app_name} --command=#{@java_path} -- -jar #{jetty_jar} #{@war_path} #{random_port}`"
"`#{@daemon_path} --running --name=#{@app_name}`" …Run Code Online (Sandbox Code Playgroud) 我正在尝试实现此视频中的一些功能,但我对新的字符串插值语法没有太多运气(我还有其他所有工作,至少在这段代码中是这样).
我正在使用Visual Studio 2015 CTP6,我已将其配置为使用.NET 4.6并已进入Build选项以确保我指定C#6.0.我也按照这里的说明进行操作.
这是我的代码:
using System;
using static System.Math;
namespace NewCsharp6Features
{
public class C6Point
{
public int X { get; }
public int Y { get; }
public double Distance => Sqrt(X * X + Y * Y);
public C6Point(int x, int y) { X = x; Y = y; }
public override string ToString()
{
return "(\{X}, \{Y})";
}
}
}
Run Code Online (Sandbox Code Playgroud)
我收到了两个这样的编译错误:
CS1009 | 无法识别的转义序列
知道我做错了什么,在这里?
在“使用类名进行字符串插值意味着什么? ”中,Candide 建议在#{}字符串内部隐式调用to_s. 因此,例如:
my_array = [1, 2, 3, 4]
p my_array.to_s # => "[1, 2, 3, 4]"
p "#{my_array}" # => "[1, 2, 3, 4]"
Run Code Online (Sandbox Code Playgroud)
但是,如果to_sfor Array 重新定义如下所示,我会得到不同的结果:
class Array
def to_s
self.map { |elem| elem.to_s }
end
end
p my_array.to_s # => ["1", "2", "3", "4"]
p "#{my_array}" # => "#<Array:0x007f74924c2bc0>"
Run Code Online (Sandbox Code Playgroud)
我想这种情况随时都会发生,而且无论如何 to_s都会被覆盖。
如果可能的话,我应该做什么来保持字符串中的to_s表达式之间的相等性?#{}
我在RubyMonk 课程中遇到了这个问题:根据课程 #{ogres}应该返回什么,根据我的经验是不同的。
var dic = new dict of string, string
dic["z"] = "23"
dic["abc"] = "42"
dic["pi"] = "3.141"
for k in sorted_string_collection (dic.keys)
print (@"$k: $(dic[k])")
Run Code Online (Sandbox Code Playgroud)
print(@ ... ) 和lines_add(@ ...) 中@ 的作用是什么?
由于这适用于 Genie 和 Vala,我认为它更适合作为一个独立的问题。
概念性问题是:
Vala 和 Genie 中的字符串插值如何工作?
我很难搞清楚为什么声明
say "\c500";
Run Code Online (Sandbox Code Playgroud)
按预期在屏幕上生成字符'Ǵ',而以下语句在编译时给出错误消息("无法识别的\ c字符"):
my $i = 500;
say "\c$i";
Run Code Online (Sandbox Code Playgroud)
即使
say "$i"; # or 'say $i.Str;' for that matter
Run Code Online (Sandbox Code Playgroud)
产生"500"(带"$ i".WHAT表示类型为Str).
我知道在 Angular2+ 中我们可以在 html 中创建条件,如下所示:
<p>{{ dynamicData.value? dynamicData.value : dynamicData.default}}</p>
Run Code Online (Sandbox Code Playgroud)
我们也可以这样做:
<p>{{ dynamicData.value? 'text 1' : 'text 2'}}</p>
Run Code Online (Sandbox Code Playgroud)
但我想结合这两种解决方案,但我不知道如何做到这一点。一般来说,我想做这样的事情:
<p>{{ dynamicData.value? 'Dynamic data value is equal: {{dynamicData.value}}' : 'no dynamic data'</p>
Run Code Online (Sandbox Code Playgroud)
您知道如何处理此文本插值吗?
我正在尝试制作一个与此类似的功能
pub const fn insert(num1:i32, num2:i32) -> &'static str {
formatcp!("n1:{}, n2:{}" , num1, num2)
}
Run Code Online (Sandbox Code Playgroud)
但 num1/num2 不是 const。我认为这作为宏是可能的,但我在宏方面没有经验。
在尝试回答这个问题时,我发现了一个奇怪的行为。
Text(LocalizedStringKey("Hello \(Image(systemName: "globe"))"))
Run Code Online (Sandbox Code Playgroud)
显示一个地球仪,但是
Text(LocalizedStringKey("Hello {world}".replacingOccurrences(of: "{world}", with: "\(Image(systemName: "globe"))")))
Text(LocalizedStringKey("Hello" + "\(Image(systemName: "globe"))"))
Run Code Online (Sandbox Code Playgroud)
显示“Hello”,然后是一堆 SwiftUI 内部术语。
一个更简单的例子是:
let x = "\(Image(systemName: "globe"))"
print(LocalizedStringKey.init(x))
print(LocalizedStringKey.init("\(Image(systemName: "globe"))"))
Run Code Online (Sandbox Code Playgroud)
我传递给的值LocalizedStringKey.init应该是相同的"\(Image(systemName: "globe"))",但是第一个打印
LocalizedStringKey(key: "%@", hasFormatting: true, arguments: [...])
和第二张照片
LocalizedStringKey(key: "Image(provider: SwiftUI.ImageProviderBox<SwiftUI.Image.(unknown context at $7ff91ccb3380).NamedImageProvider>)", hasFormatting: false, arguments: [])
似乎LocalizedStringKey.init改变其行为取决于我传递的参数是否是(内插的)字符串文字。
据我所知,这两个调用正在LocalizedStringKey.init调用相同的初始化程序。中只有一个无参数标签初始化程序LocalizedStringKey,它采用String.
如果还有一个接受 a 的初始化程序LocalizedStringKey,结果会更容易理解。毕竟LocalizedStringKey 有自定义的字符串插值规则,而且是专门针对的。Image但据我所知,这是唯一没有参数标签的初始化程序。
如果初始化器的参数是 ,这也可以理解@autoclosure () -> String …
use v6.d;
my Str $foo = 'Hello';
my constant $BAR = "--$foo--";
say $BAR;
Run Code Online (Sandbox Code Playgroud)
Use of uninitialized value element of type Str in string context.
Methods .^name, .raku, .gist, or .say can be used to stringify it to something meaningful.
in block at deleteme.raku line 4
----
Run Code Online (Sandbox Code Playgroud)
--Hello--
Run Code Online (Sandbox Code Playgroud)
my没有或 代替our也会发生同样的事情my。
[187] > $*DISTRO
macos (12.6)
[188] > $*KERNEL
darwin
[189] > $*RAKU
Raku (6.d)
Run Code Online (Sandbox Code Playgroud)