Scalaのcase classとgroovy

以前より注目していた勉強会なのですが、
以下のやつに初参加しました。
 
天領倉敷Scala第9回勉強会
http://partake.in/events/fa650520-a691-4de7-ad54-fd48a6b4ad06
 
今までのおさらいが主なテーマだったのですが、
和やか(非:名古屋化)な雰囲気で質疑などができ大変よい刺激を受けました。
また、twitter4jのラッパであるtwitter4sの話なども今後の期待ができる内容でワクワクです。
 
既に報告blogが書かれてます。
天領倉敷ScalaでTwitter4Sについて発表してきました
http://d.hatena.ne.jp/mao_instantlife/20120701
 
ということで久しぶりにScalaを触りました。
 

Scalaスケーラブルプログラミング[コンセプト&コーディング] (Programming in Scala)

Scalaスケーラブルプログラミング[コンセプト&コーディング] (Programming in Scala)

 
参考書(手持ちは初版)は14章まで目を通していたのですが、
勉強会で議論になったケースクラスは15章の内容だったので
勉強会の後軽く目を通してみました。
う〜ん、こういうのは使ってみるしかないなぁという感じ。
 
ところで、懇親会でTwitter4Sのサンプルプログラムを書いてくれと言うリクエストが飛んでいた。
ラッパなので出来ているところは今でも動くらしい。
Scalaはどうも今自分に必要な言語って感じはしないので・・・という話をしていたら
scala-library.jarを読みこめばgroovyからscalaを呼べるらしい。
まぁ、コンパイルすればJavaのクラスになるんだから、そりゃそうだな。
 
Calling Scala from Groovy
http://groovy.codehaus.org/Calling+Scala+from+Groovy
 
動かしてみたらどうもdoubleがDoubleと大文字で書かないと動かないみたい。
もしかしたらバージョンによったら動いていたのかもしれない。
で、以下のようになる。
 
Complex.scala

class Complex(real: Double, imaginary: Double) {
  def re = real
  def im = imaginary
  override def toString() = "" + re + (if (im < 0) "" else "+") + im + "i"
}

 
ComplexMain.groovy

a = new Complex(1.2, 3.4) 
b = new Complex(1.2, 3.4)
println a
assert a == b

 
これだけで動く。
堅く作るべきところだけscalaで作ってgroovyをグルー的使い方をするのが実にスムースである。
このスタイルはアリなんじゃないかなぁ。
 
で、実行結果だが実はAssertion failedが出る。
ここで、scalaのクラスをcase classにしたらAssertion failedが出なくなる。
これケースクラスのサンプルとしてOKなのかしら?
いまいち自身がないので敢えて晒しておく。

    • -

追記
問題ないみたい。
scalaのcase classでequalsが勝手に実装されてて
それをgroovyから呼び出してることになる。