2011年1月14日金曜日

setterと「_」(アンダースコア)の不思議

ScalaでSwingのプログラムを組もうとして、apiのドキュメントを見ていたら、ちょいちょい「_=」で終わるメソッド名が目についた。

気になって、調べて見たら

Getters and Setters in Scala | The Personal Blog of Dustin Martin

を発見。

一番下のほうに

First, the method name is “age_=”. The underscore is a special character in Scala
and in this case, allows for a space in the method name which essentially makes
the name “age =”.

とあるんだけど訳すと

最初にメソッド名は "age_="となる。アンダースコアはScalaでは特別な文字で、この場合メソッド名に空白を許可し、メソッド名を実質的に "age =" とする

という意味になる。なんとなくこの文章読んで思ったのが
「文字列と"="の間に複数の空白が入ると実はエラーになるのでは」
と思って試してみた。

class SimpleTest {
   var _simpleTest = ""
   def test_=(strTest: String) = {_simpleTest = strTest}
   def test = _simpleTest
}

これを下記のように実行すると

val hoge = new SimpleTest
hoge.test = "Hello" // OK
hoge.test     = "Hello" //OK

という感じでどっちも問題なかった。

表記の仕方からするとエラーになった方が自然なような気がするんだけど、まあ、エラーにされると不便だからいいか。
でも不思議~~。

0 件のコメント:

コメントを投稿