【问题标题】:variable string interpolation in scalascala中的变量字符串插值
【发布时间】:2019-07-25 12:55:01
【问题描述】:

很明显,从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))

但是,到目前为止,没有任何效果。有没有可能?

【问题讨论】:

标签: scala


【解决方案1】:

没有简单的方法可以得到你想要的东西。为了使字符串插值起作用,编译器必须将字符串文字分成不同的部分并将它们发送到StringContext 以进行重建。编译器不会对 String 变量执行此操作。

您可以自己切割String 的值,并将它们发送到StringContext,但您还需要一种将变量名(String)转换为正确值的方法。

请参阅this answer 的类似问题,了解如何完成此操作的示例。

【讨论】:

    【解决方案2】:

    不,这在 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

    【讨论】:

      猜你喜欢
      • 2012-10-26
      • 1970-01-01
      • 1970-01-01
      • 2019-06-03
      • 1970-01-01
      • 2019-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多