2016-11-29 10 views
1

私はScalaの文字列補間の機能に没頭しています。私たちは、補間された文字列の式を評価する必要がある場合スカラの文字列の補間と評価の式

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

私の疑いがある:のような文字列の補間は、私たちが式を評価することができます。他の開発者がこの例のような機能を使用していて、これが正しかって安全であるかどうかわからない、多くのScalaコードがあります。

+0

を行うが、非常に醜いだろう。このコードをプロダクションで使用し、これを維持するのが楽しいですか?これは安全に使用できます。 – Pavel

+0

私はこのようなコードを本番環境では見たくありません。しかし、私は他の開発者に、なぜこれをしてはならないのか説明できません。 – PawelN

+0

実際のスカラコードがこの評価に含まれているかどうか尋ねていますか?コード生成など?この場合、評価が失敗すると問題が発生する可能性があります。実用的かどうかわからない – Pavel

答えて

4

私は決してそれを使用しないであろうし、私は同僚にそれを使用させたくない。

2つのことは、本質的にオフになっている:それは読み値の連結が容易になりますので、あなたがそこに全体のScalaプログラムを固執しない限り、

  • 文字列の補間は...便利な機能です:)
  • ありませんそこには複雑な表現しかありませんが、副作用を使用しているので、補間を評価する過程で100の値が出力されます。 ()がために、理解の戻り値、すなわちUnitでどこだから、

    other values 1 
    other values 2 
    ... 
    other values 100 
    Hello World!() 
    

を取得します。

私は自分自身(と私の同僚)驚異的な頭痛を保存し、ちょうどこれは文法的に正しい

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/を参照してください。 –