很明显,在scala docs中,您可以使用字符串插值:
val name = "James"
println(s"Hello, $name") // Hello, James
但是,在格式例如"Hello, $name"
在变量中的情况下,也可以这样做吗?
我尝试过这样的东西:
val name = "James"
val fmt = "Hello, $name"
println(s fmt)
println(s(fmt))
但是,到目前为止,什么都不起作用。这有可能吗?
发布于 2019-07-25 04:55:01
没有简单的方法可以得到你想要的东西。为了使字符串插值起作用,编译器必须将字符串文字分割成不同的部分,并将它们发送到StringContext
进行重构。编译器不会对String
变量执行此操作。
您可以自己剪切String
值,并将它们发送给StringContext
,但您还需要一种方法将变量名( String
)转换为正确的值。
有关如何做到这一点的示例,请参阅类似问题的this answer。
发布于 2019-07-25 04:28:43
不,这在scala中不起作用。
val name = "James"
val fmt = "Hello, $name"
println(s fmt)
println(s(fmt))
但是你可以像下面这样做
println(s"$fmt")
OR
println(f"$fmt%s")
在字符串插值中,s
总是希望双引号作为下一个字符出现,因此s fmt或s(fmt)都不起作用。
你可以在这里找到更多信息https://docs.scala-lang.org/overviews/core/string-interpolation.html
https://stackoverflow.com/questions/57194263
复制相似问题