新しいblogに移行しました

新ブログ "All Yout Bugs Are Belong To Ass" に移行しました!

2011-05-26

[Scala]Scala勉強会in秋葉原#35に行ってきた

HelloWorldとxhtmlのパーシングあたりで止まってるScalaについてもう少し掘り下げるべく、Scala勉強会にお邪魔してきました。

勉強会第35回 - Scala勉強会 in 渋谷

発表について

当日の発表はよしださんによる Scala2.9.0の新機能についての説明でした(資料)
まあ僕は初学者ということもあって、正直なところ発表内容を深く理解できていない部分があるのですが、それでも基礎的な部分についてはおおむね理解できたつもりではあります。
特にJavaプリミティブ型からScalaの各種型への自動的な変換(Auto-Unboxing for Java Boxed valuesのスライドのあたり)なんかは、「今までなかったのかよw」と心の中でツッコんでしまいました。

質問タイム

カリー化されたメソッドのオーバーライドについて、第2引数の型が異なるメソッドのオーバーライドを定義できるにも拘らず、メソッドのコール時に例外コンパイルエラーが発生してしまうのはなぜ?という質問があがりました。

実際に試してみました。
たとえば、こんな状態。
scala> object X {
     |   def a( x:String )( y:String ){}
     |   def a( x:String )( y:Int ){}
     | }
defined module X

この状態でメソッドX.aをコールすると、例外コンパイルエラーが発生するということですが・・・
scala> X.a( "hoge" )( 1 )
:9: error: ambiguous reference to overloaded definition,
both method a in object X of type (x: String)(y: Int)Unit
and  method a in object X of type (x: String)(y: String)Unit
match argument types (java.lang.String)
       X.a( "hoge" )( 1 )
         ^

scala> X.a( "hoge" )( "fuga" )
:9: error: ambiguous reference to overloaded definition,
both method a in object X of type (x: String)(y: Int)Unit
and  method a in object X of type (x: String)(y: String)Unit
match argument types (java.lang.String)
       X.a( "hoge" )( "fuga" )
         ^
たしかに例外コンパイルエラーが発生しました。しかも第2引数にInt、Stringの何れを与えてもこの現象が発生します。

質疑応答の中での回答では、「Odersky曰く『仕様です』」とのことでした。


xhtml関連の質問をしました

じつは開会前に「xhtmlのパース/置き換えをするにはどうしたらよいか」という質問をしました。
皆さんのご意見を聞く限りでは、どうやらjerichoというライブラリを使用するのがベターとのことでした。

感想とか

scala初学者でも十分に参考となる内容でした。ぼくの他にも数名初学者の方がいらしたのですが、むしろ初学者の方ほどこの勉強会に参加するメリットがあると思います。
また、近々yuroyoroさん共著のscala本が出版されるそうです。こういった情報に関するアンテナを広げるという意味でも、今回の参加は意義深いものでした。

2011/05/27 追記

例外と表記されている箇所ですが、よしださんより「例外発生というより、あれはコンパイルエラーですね」とツッコミをいただき、「コンパイルエラー」と表記を改めました。

0 件のコメント: