http://cappuccino.jp/scala-ja/?Scala%CA%D9%B6%AF%B2%F1%A1%F7%B4%D8%C0%BE-1に行ってきた

Scalaにちょっと興味が出てきたので、勉強会に行ってきた次第です。ちなみに勉強会へは初参加。

とりあえずすっきりしたことをつらつらと。

メソッドと関数(オブジェクト)は違う

クロージャを作る際に、ScalaのREPL上で以下のようなことを行うとエラー。理由は、実はTopオブジェクトみたいなのがいるらしいから。で、メソッドを関数オブジェクトにする場合は、(メソッド名 _) とすればよい。
また、メソッドを関数オブジェクト化した場合、フィールド変数などはちゃんと参照可能になっています。詳しくは調べていませんが、Schemeクロージャのように、レキシカルスコープなのかしら。

scala> def f(x:Int) = {x + 3}
f: (Int)Int

scala> var ff = f
<console>:5: error: missing arguments for method f in object $iw;
follow this method with `_' if you want to treat it as a partially applied function
       var ff = f
                ^

scala> var ff = (f _)
ff: (Int) => Int = <function>

scala> class A(_x:Int) {var x = _x}
defined class A

scala> var a = new A(3)
a: A = A@135b95d

scala> (a.x _)
res4: () => Int = <function>

scala> res4()
res5: Int = 3

1 to 5 map fizzBuzz は、(1.to(5)).map((x:Int) => {fizzBuzz(x)})

1はInt型、toはメソッド、5は引数、…となっているのですが、Intにはtoメソッドがない。これはRichIntで定義されており、IntがRichIntのメソッドを利用できるのは、Implicit Conversionという機能によるものだそうです。

その他雑感

  • 型推論とカリー化はまだまだ発展の余地あり?
  • 正規表現リテラルでほすぃ
  • Actorはスレッドプールで実現されているため、スケールは難しいんじゃね?的な話

その後

その場で懇親会が開かれたのですが、みんな凄いね。

  • 何故か化学の話になったり、
  • 何故かスカラー波の話になったり、
  • 何故かノートPCの電源効率の話になったり、
  • 何故か交通手段の効率の話になったり、
  • 何故か宇宙線のちかr(ry

みんなGJ。
個人的には、ついったにも書いたけれど、電車は自動車と違ってある程度移動する方向を制限する代わりにスケールするから電力的な効率がいいってことかな。

えーと何の勉強会でしたっけ。あぁそうだった。スケール重要っていう勉強会でした。
以上。

追記というか大事なこと

keisuke_nさん、講師お疲れ様でした。非常に分かりやすかったです。

また、勉強会には参加されていない方でしたが、勉強会メンバに差し入れをいただきました。ありがとうございました。