implicit def

淡々と続いているscala勉強会@東北、既に第6回目。implicit conversionでナベアツ作りました。

scala@tohoku、週に1度1時間、ustやskypeを使ってネットでやってる勉強会です。私はscalaで仕事できているわけではないのですが、勉強はコツコツ続けています。週に1度の目標があるのはいいペースメイキングになりますね。

最初はscalaそのもののコードリーディングから始まったのですが、
初学者も入りやすいように「みんなのコード」で自作コードをさらして、みんなで読んで添削してもらう。ということをやってます。

が、第5回あたりから参加者が減ってしまいました ><
みなさんが参加しやすい時間も調整中。

私は初めて知った文法で何かやってみる的なコードしか書けませんが、暖かく迎えてくれるので、大変にうれしい。かなりレベルの高いプログラマの面々からいろいろと教えてもらえるので、毎回(ついていけないこともたくさんあるけど)とても勉強になっています。

東北の人に限らず、気が向いたらskypeでポロッと立ち寄ってください。なんなら勉強会自体をジャックしてもらってもかまいませんよー。

私の今日の発表

ナベアツの実装:implicit conversion(暗黙の型変換)の使い方
ymnkさんによる添削版

 class Baka(i:Int){
  def ! = "さぁ~ん!"
 }
 implicit def baka(n:Int) = new Baka(n)

と定義すると、

 println( 3 ! ) // => "さぁ~ん"

となる。

implicit宣言すると、足りないメソッド(ここでは Int.! )が出てきたときに、コンパイル時に挿入できるメソッドを検索して挿入してくれる。

 3.!     // Int.! が足りない!
  ↓
 baka(3).!  // と、コンパイラが補完してくれる。
  ↓
 (new Baka(3)).! //が、実行

この補完方法が分かれば、implicit def の右辺はどんな風にでも組める。ただし何も考えずに多用すると、オブジェクトがポコポコとnewされてしまうので、あんまりクダらない用途では使わない方がいいですね。

こんなネタでも付き合ってくれてありがとうございます!


今日の学び

calc3.scala(h_sakurai)
・Streamの鮮やかな使い方に驚愕した。
・コンパイラってこうやって作るのか!と少しわかった。

TakahashiMethodInScalaSwing.scala(ymnk)
・scala-swing パッケージの概要
・まだAPIとして分かりづらくて、
 結局scala-swing のソースコードリーディングにw
・def title_ = と宣言するとセッターになって、
 title = "あ" と代入文のように書ける。
・コンパイルオプション-Xcheckinitで、初期化されていない
 オブジェクトをチェックできる

Twitterにて、kmizuさんより
・scalac -Xprint:<phase-name>
 で、シンタックスシュガーを展開したソースが見れる。
 <phase-name>は、scalac -Xshow-phasesで


など。第6回まで、もっとたくさん学んだことがありますが、これからはもっと随時書き残していくことにする。


同じカテゴリのエントリ
1.Lift再入門 / 8.javascriptからsubmitできない / 7.Ajax Form / 6.Radio、Checkboxについて / 5.行列型の編集FORM / 4.サーバーサイドバリデーションとサーバサイド関数 / 3.ログインFORM - S.param使ったら負け / 2.Snippetメソッドとして許される型 / sbt0.12.xで依存jar抽出タスク / scala2.10+lift2.5+NetBeans7.2 / Scalaで入門関数プログラミング / reactive-webを試してみました / Lift2.2M1のテンプレート機能 / Scala Compiler Plugin / View Bound/Context Bound / ScalaZa01参加してきました / Akka Frameworkチュートリアルの次 / Akka Frameworkチュートリアルその2 / Akka Frameworkチュートリアル / LiftでJCaptcha / Url Rewrite Filter / sbt-android-plugin / Android SDK for Scala / 祝Lift2.0リリース / Liftの携帯対応まとめ / Scala2.8への移行 / Lift 2.0-scala280-SNAPSHOT/sbt0.7.1 / Scalaお絵かき環境 - Kojo / Lift+Quartzでバッチ / Scala&Liftを採用した理由 / Liftでdate_select系ヘルパーを作る / LiftでAjax / LiftのSubmitかしこい / lift-mapperのpaginateを使う / snippetをspecする / Lift Mapperを拡張する / LiftのDBをMySQLに / Liftプロジェクト環境を整える / Scala本読み比べてみました / NetBeans6.7&scala / じつはScalaはライトな言語 / Scalaバザ~ル / lift1.0所感 / specsを読む / implicit def / ScalaならNetBeansがサイコー / scala勉強会@東北がスタート / それでも俺はLiftをやるってのか / Scala&Liftセットアップ / ブログリニューアル /
コメント

コメントしてください

closed.