标签: string-interpolation

在字符串中访问对象的方法

最近我正在阅读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)

php string string-interpolation

5
推荐指数
1
解决办法
200
查看次数

Ruby 对反引号表达式中字符串替换的限制?

好的,所以我尝试执行以下代码:

`#{@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}`
Run Code Online (Sandbox Code Playgroud)

变量值为:

  • @daemon_path = path/to/daemon(对于我的系统正确)
  • @app_name = foobarbazquux
  • @command = path/to/java (对于我的系统也是正确的)
  • jetty_jar = 一种返回自定义 jar 路径的方法,该自定义 jar 支持独立的 jetty 容器(已测试;有效)
  • @war_path = /path/to/helloworld/war (在独立码头容器中测试;有效)
  • random_port = 一个返回 10000 到 65535 之间随机端口号的方法(暂时将其更改为返回 8000 或 22,具体取决于我是否想要失败启动战争)

我收到此错误(检查了 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)

ruby runtime-error limit string-interpolation backticks

5
推荐指数
1
解决办法
4195
查看次数

新的C#6.0字符串插值语句不编译

我正在尝试实现此视频中的一些功能,但我对新的字符串插值语法没有太多运气(我还有其他所有工作,至少在这段代码中是这样).

我正在使用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 | 无法识别的转义序列

知道我做错了什么,在这里?

c# string-interpolation c#-6.0 visual-studio-2015

5
推荐指数
1
解决办法
726
查看次数

#{} 总是等于 to_s 吗?

在“使用类名进行字符串插值意味着什么? ”中,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}应该返回什么,根据我的经验是不同的。

ruby string-interpolation

5
推荐指数
1
解决办法
4087
查看次数

字符串插值/字符串模板如何工作?

@lf_araujo 在这个问题中提出

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 中的字符串插值如何工作?

string-interpolation vala genie

5
推荐指数
1
解决办法
737
查看次数

Perl6中的字符串插值

我很难搞清楚为什么声明

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).

string-interpolation perl6

5
推荐指数
2
解决办法
192
查看次数

Angular 在 html 中显示条件文本,包括条件数据

我知道在 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)

您知道如何处理此文本插值吗?

html dynamic string-interpolation angular-material angular

5
推荐指数
1
解决办法
1万
查看次数

在 const 函数中插入字符串

我正在尝试制作一个与此类似的功能

pub const fn insert(num1:i32, num2:i32) -> &'static str { 
    formatcp!("n1:{}, n2:{}" , num1, num2) 
} 

Run Code Online (Sandbox Code Playgroud)

但 num1/num2 不是 const。我认为这作为宏是可能的,但我在宏方面没有经验。

compile-time-constant string-interpolation rust

5
推荐指数
1
解决办法
1189
查看次数

为什么 LocalizedStringKey 的行为取决于我是否将字符串插值传递给其初始化程序?

在尝试回答这个问题时,我发现了一个奇怪的行为。

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 …

string-interpolation swift swiftui localizedstringkey

5
推荐指数
1
解决办法
488
查看次数

为什么变量不在“constant”声明中插入?

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)

constants string-interpolation raku

5
推荐指数
1
解决办法
117
查看次数