带有嵌入变量的现有String上的Scala String Interpolator

ban*_*cee 3 scala

我可能会遗漏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) 
Run Code Online (Sandbox Code Playgroud)

这甚至可能吗?

编辑:基于下面的第一个答案,它必须将变量replaceInMe作为输入.在这里我将它定义为一个字符串,但它实际上是从配置文件中读取的一行.

Mic*_*jac 5

不会.文档清楚地表明,您只能使用字符串文字,而不能使用任何字符串对象.

这是因为当编译器看到:

s"How Now ${brown} ${cow}"
Run Code Online (Sandbox Code Playgroud)

它将其转换为:

new StringContext("How Now ", " ", "").s(brown, cow)
Run Code Online (Sandbox Code Playgroud)

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

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