我正在潛入Scala的字符串插值功能,我不知道它是否安全使用它。字符串插值允許我們評估如下表達式:斯卡拉字符串插值和評估表達式
println(s"Hello World! ${for (i <- 1 to 100) println(s"other values $i")}")
我的疑問是如果我們應該評估插值字符串中的表達式。我看到很多Scala代碼,其他開發人員正在使用此功能,例如,不知道這是否正確和安全。
我正在潛入Scala的字符串插值功能,我不知道它是否安全使用它。字符串插值允許我們評估如下表達式:斯卡拉字符串插值和評估表達式
println(s"Hello World! ${for (i <- 1 to 100) println(s"other values $i")}")
我的疑問是如果我們應該評估插值字符串中的表達式。我看到很多Scala代碼,其他開發人員正在使用此功能,例如,不知道這是否正確和安全。
我永遠不會使用它,我不希望我的同事使用它。
兩件事情基本上是關閉:
不只有那裏有一個複雜的表達式,但是你使用的是副作用,所以在評估插值的過程中將會打印100個值。所以,你得到
other values 1
other values 2
...
other values 100
Hello World!()
凡()
是換理解的返回值,即Unit
。
我會拯救自己(和我的同事)巨大的頭痛,只是做
println(s"Hello World!")
for (i <- 1 to 100) {
println(s"other values $i")
}
字符串插值是否同樣適用於普通的舊字符串連接? – PawelN
字符串連接速度稍快,所以如果這是您的瓶頸,請使用它來代替插值。這種差異在大多數使用情況下可以忽略不計,但是 - 一如既往 - 根據您的要求來決定。請參閱http://yosoyu.com/index.php/2015/03/14/string-interpolation-vs-string-concatenation/ –
這句法正確,但看起來非常難看。你確定你會在生產中使用這些代碼並且很樂意維護這個嗎?這是安全的使用。 – Pavel
我不希望在生產中看到類似這樣的代碼。但我無法解釋其他開發人員爲什麼他們不應該這樣做。 – PawelN
你問這個評估中是否有一些實際的scala代碼?代碼生成等?在這種情況下,如果評估失敗,我會認爲可能會出現問題,導致複雜的問題。不確定是否實際。 – Pavel