Snippet: For and Yield | The Scala Programming Language
yieldしたら処理後のものを戻しますよーというサンプル。
package sample.snippet object YieldSample extends Application { val array = Array("a", "b", "c") println("変換前" + array.toString) val res = for (arg <- array) yield arg toUpperCase println("変換後" + res.toString) }
ScalaはRubyとかと同じで、return文を書かなくても最後に評価した式を戻す。
実行結果。
変換前Array(a, b, c) 変換後Array(A, B, C)
a.toStringとa toStringの出力が異なる!?
ところで、僕の環境だとres.toStringじゃなくres toStringと書くとこういう出力になってしまう。
変換前[Ljava.lang.String;@8e2b22 変換後[Ljava.lang.String;@f934ad
本来意味は同じのはずだけど。。。eclipse3.4.0(Mac OS) + Scala plugin2.7.2RC3
ターミナルからscalaコマンドでインタラクティブに入力して実行したときは問題なし。
プラグインの問題なのだろうか。。。
(追記)
呼び出し順序の問題だけでした。
println("変換後" + res toString)だと、"変換後" + resした結果をtoStringしちゃう。
println("変換後" + res.toString)だと、ドットで呼び出し順序がわかるからres.toStringした結果と文字列を結合する。