phi*_*ert 0 scala string-interpolation
我正在 RDBMS 上执行查询并获取字符串形式的结果。字符串看起来像这样:
val DBASE = "my_database"
val FREQ = "monthly"
val queryResult: String = sqlContext.read.jdbc(...).collect.map(...).first
// queryResult = Database is $$${DBASE} and frequency is $$${FREQ}
Run Code Online (Sandbox Code Playgroud)
接下来我将替换$$$为$,所以我留下类似的内容:
queryResult = "Database is ${DBASE} and frequency is ${FREQ}"
Run Code Online (Sandbox Code Playgroud)
如何在DBASE和上使用字符串插值FREQ?我努力了:
val substituted = f"${queryResult}"
Run Code Online (Sandbox Code Playgroud)
和
val substituted = s"${queryResult}"
Run Code Online (Sandbox Code Playgroud)
但变量并没有被替换。除了使用以下内容之外,我还能做些什么:
queryResult.replaceAll("\\$\\{DBASE\\}", DBASE).replaceAll(...)
Run Code Online (Sandbox Code Playgroud)
一种选择是让脚本编写模板:
________ ___ / / ___
/ __/ __// _ | / / / _ |
__\ \/ /__/ __ |/ /__/ __ |
/____/\___/_/ |_/____/_/ | |
|/ version 2.12.6
scala> import javax.script._
import javax.script._
scala> val se = new ScriptEngineManager().getEngineByName("scala")
se: javax.script.ScriptEngine = scala.tools.nsc.interpreter.Scripted@6549ce71
scala> val b = se.createBindings
b: javax.script.Bindings = javax.script.SimpleBindings@2648aa1b
scala> b.put("DBASE", "my_db")
res0: Object = null
scala> b.put("FREQ", "monthly")
res1: Object = null
scala> se.eval("""s"Db is $DBASE, freq is $FREQ"""", b)
res2: Object = Db is my_db, freq is monthly
Run Code Online (Sandbox Code Playgroud)
绑定对象的类型不正确,但您可以进行强制转换或进行更多计算:
scala> se.eval("""s"Db is $DBASE, freq is ${FREQ.toString * 2}"""", b)
res4: Object = Db is my_db, freq is monthlymonthly
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1215 次 |
| 最近记录: |