我可能会遗漏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作为输入.在这里我将它定义为一个字符串,但它实际上是从配置文件中读取的一行.
不会.文档清楚地表明,您只能使用字符串文字,而不能使用任何字符串对象.
这是因为当编译器看到:
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是从外部文件中提取的值.外部文件中的字符串如何可能知道程序中的运行时变量?如果没有定义怎么办?使用字符串插值,这是通过编译错误处理的,这显然不会在运行时发生.在运行时,您需要另一种方法来处理缺失值.
你最好使用某种配置库来处理这个问题.
| 归档时间: |
|
| 查看次数: |
634 次 |
| 最近记录: |