2016-11-29 95 views
1

我正在潛入Scala的字符串插值功能,我不知道它是否安全使用它。字符串插值允許我們評估如下表達式:斯卡拉字符串插值和評估表達式

println(s"Hello World! ${for (i <- 1 to 100) println(s"other values $i")}") 

我的疑問是如果我們應該評估插值字符串中的表達式。我看到很多Scala代碼,其他開發人員正在使用此功能,例如,不知道這是否正確和安全。

+0

這句法正確,但看起來非常難看。你確定你會在生產中使用這些代碼並且很樂意維護這個嗎?這是安全的使用。 – Pavel

+0

我不希望在生產中看到類似這樣的代碼。但我無法解釋其他開發人員爲什麼他們不應該這樣做。 – PawelN

+0

你問這個評估中是否有一些實際的scala代碼?代碼生成等?在這種情況下,如果評估失敗,我會認爲可能會出現問題,導致複雜的問題。不確定是否實際。 – Pavel

回答

4

我永遠不會使用它,我不希望我的同事使用它。

兩件事情基本上是關閉:

  • 路線插值是一個很好的功能,因爲它使值易於閱讀......除非你在那裏堅持一個完整的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") 
} 
+0

字符串插值是否同樣適用於普通的舊字符串連接? – PawelN

+0

字符串連接速度稍快,所以如果這是您的瓶頸,請使用它來代替插值。這種差異在大多數使用情況下可以忽略不計,但是 - 一如既往 - 根據您的要求來決定。請參閱http://yosoyu.com/index.php/2015/03/14/string-interpolation-vs-string-concatenation/ –