如何解决变量值的字符串插值
我希望通过字符串插值来处理变量值。
val temp = "1 to 10 by 2"
println(s"$temp")
预期输出:
inexact Range 1 to 10 by 2
但是得到
1 to 10 by 2
有什么办法可以做到这一点?
编辑 使用StringContext的正常情况是:
$> s"${1 to 10 by 2}"
inexact Range 1 to 10 by 2
这将返回范围从1到10,步长值为2。
并且String上下文不适用于变量,所以有没有办法可以我喜欢
$> val temp = "1 to 10 by 2"
$> s"${$temp}" //hypothetical
这样,口译员会将其评估为
s"${$temp}" => s"${1 to 10 by 2}" => Range from 1 to 10 by step of 2 = {1,3,5,7,9}
解决方法
通过将字符串值设置为 temp ,您可以做到这一点-创建一个平面字符串。如果您希望将其作为实际代码,则需要删除引号:
val temp = 1 to 10 by 2
然后您可以打印结果:
println(s"$temp")
这将打印以下输出字符串:
inexact Range 1 to 10 by 2
这是表示 Range 的变量的toString(...)输出。如果要打印 1到10 by 2 计算的实际结果,则需要执行以下操作:
val resultsAsString = temp.mkString(",")
println(resultsAsString)
> 1,3,5,7,9
甚至是这样(请注意:这里的大括号{}不是用于字符串插值,而只是用作普通的字符串字符):
println(s"{$resultsAsString}")
> {1,9}
修改 如果您想要实时实际地解释/编译Scala代码(尽管出于安全原因,不建议这样做),那么您可能对此感兴趣: https://ammonite.io/-Ammonite,Scala脚本
无论如何,要从字符串解释代码,您可以尝试使用以下代码: https://docs.scala-lang.org/overviews/repl/embedding.html
请参阅以下几行:
val scripter = new ScriptEngineManager().getEngineByName("scala")
scripter.eval("""println("hello,world")""")
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。