Scala2.10の新機能を勉強する その1 StringInterpolation
久々のブログですが、
今更ながらScala2.10の新機能をちゃんと勉強しておこうと思います。
※終わったらRuby2.0やろうと思ってますが、、、
今回のテーマ
StringInterpolation
です。
StringInterpolationって?
Rubyの式展開のように、文字列リテラル内に、式を書く事ができる機能です。
Interpolationって、どういう意味だろうか、、、
初めて聞いたので、意味がわからず、、調べてみました。
alc
http://eow.alc.co.jp/search?q=interpolation&ref=sa
→〔他のものに〕挿入すること、差し挟むこと
なるほど、文字列になんか差し込むので、StringInterpolation、なんですね。
とりあえず言葉の意味は理解できました。
式を埋め込んでみる
まずは、単純に変数の値を埋め込んでみます。
これで、
Hello hoge!
となります。
Rubyの記法に比べると{}が無くて、#が$になった感じですね。
では、次に、計算式やらメソッド呼び出しやらを埋め込んでみます。
ここでは{}が必要な場面が登場しました。
変数もしくは引数なしのメソッド呼び出しは{}は不要ですが、
それ以外は必要になるようです。
※当然といえば当然ではある、、、。
フォーマットを指定して埋め込む
次はフォーマットを指定して値を埋め込んでみたいと思います。
ここで最後の行はエラーになりました。
コメントにも書きましたが、
piはDouble型になるので、Intを期待するフォーマット「%d」は使えません。
※コンパイル時にエラーになります
[error] /xxxx/workspace/scala-samples/scala-2.10-sample/src/main/scala/interpolation/StringInterpolation_03.scala:10: type mismatch; [error] found : Double [error] required: Int [error] println(f"$hoge is $pi%2.4d") // これはpiがDoubleなので、エラーになる [error] ^ [error] one error found [error] (compile:compile) Compilation failed
仕組みを知る
このStringInterpolationの仕組みはStringContextのメソッド飛び出しで実現されているようです。
試してみます。
こんな感じ。
hoge"...."
これは
StringContext(....).hoge(....)
に展開されるようなので、
ImplicitConversionと組み合わせれば、他にも便利なリテラルが実現できそうです。
他の機能を勉強してからやってみたいと思います。