带有嵌入变量的现有字符串的 Scala 字符串插值器

2024-01-07

我可能缺少 Scala 字符串插值机制的一些基本内容。我想做的事:

// this could come from a config file, string here to demo
val brown = "BROWN"
val cow = "Moo"
val replaceInMe = "How Now ${brown} ${cow}"

//this does what I eventually want:
val output = s"How Now ${brown} ${cow}"

//But, since the variables 'brown' and 'cow' are defined,
//I really wold like to be able to do something like:
val output = s(replaceInMe) 

这可能吗?

EDIT:根据下面的第一个答案,它必须采用变量replaceInMe作为输入。这里我将它定义为一个字符串,但它实际上是从配置文件中读取的一行。


No. The 文档 http://docs.scala-lang.org/overviews/core/string-interpolation.html明确表示只能使用字符串文字执行此操作,而不能使用任何字符串对象。

这是因为当编译器看到:

s"How Now ${brown} ${cow}"

它将其转换为:

new StringContext("How Now ", " ", "").s(brown, cow)

编译器无法使用任意标识符来执行此操作,因为这些值可能是在运行时而不是编译时设置的。想象一下replaceInMe是从外部文件中提取的值。外部文件中的字符串如何可能知道程序中的运行时变量?如果没有定义它们怎么办?对于字符串插值,这是通过编译错误来处理的,这显然不会在运行时发生。在运行时,您需要另一种方法来处理缺失值。

您最好使用某种配置库来处理这个问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

带有嵌入变量的现有字符串的 Scala 字符串插值器 的相关文章

随机推荐