Pixel Pedals of Tomakomai

北海道苫小牧市出身の初老の日常

今日は Akasaka.scala 34 の日です

Akasaka.scala 34に参加してます。タグは#akskscalaです。

Scala言語仕様読書会7 / @seratch さん

詳細はこちら

  • 前回の復習
    • メンバーマッチング
    • 事前定義
  • 修飾子
    • 2回出てはいけない
    • (a, b)のような定義に先行する場合は両方に
    • private → コンパニオンからもアクセスできる。 class-private
    • 限定修飾 private[C] → object-private
    • protected
    • override → 親クラスの具象メンバをオーバーライドするときは必須
    • abstract → traitには不要
    • abstract override → traitで使える。AIPっぽくなる
    • final → abstractやsealedとは使えない
    • sealed → 同じファイル内のみ継承できる。サブクラスは継承できる
    • lazy val → 無限ループするかも
lazy val y:Int = x
lazy val x:Int = y
println(x)

[RESULT]
% scala /tmp/hoge.scala 2>&1 | head
java.lang.StackOverflowError
        at Main$$anon$1.x(hoge.scala:7)
        at Main$$anon$1.y(hoge.scala:6)
        at Main$$anon$1.x(hoge.scala:7)
        at Main$$anon$1.y(hoge.scala:6)
        at Main$$anon$1.x(hoge.scala:7)
        at Main$$anon$1.y(hoge.scala:6)
        at Main$$anon$1.x(hoge.scala:7)
        at Main$$anon$1.y(hoge.scala:6)
        at Main$$anon$1.x(hoge.scala:7)
  • 用語:valは「値」
  • クラス定義
    • private, protected でコンストラクタのアクセス修飾
    • アノテーション、カリー化された引数の並び
    • valだとゲッター、varだとセッターも
    • 補助コンストラクタは基本コンストラクタを必ず呼ぶ
  • ケースクラス
    • 2.9.xから?パラメータリストなしではwarningが出る
    • コンパニオンオブジェクトと、copy, equals, hashCode, toString などが追加される
  • Trait
    • コンストラクタパラメータは定義できない
  • オブジェクト定義
    • object 宣言は lazy val = new ... とほぼ同じ振る舞い
  • 次回は6章

g8 テンプレートをつくってみよう(ハンズオン) / @tototoshi さん

  • giter8とは
    • github上のプロジェクトをテンプレにできるツール
    • csコマンドでインストール
    • g8コマンドでテンプレが作られる
    • カレントに展開されるので注意
    • src/main/g8 の中にテンプレ化したいものを突っ込む
    • テストはgiter8-pluginを使う
    • Exceptionが出てもビビらない
  • 作者のn8hanさんは色々書いているけど、ソースに癖がある
  • xsbti.AppMain → sbtから
  • カレントに展開されるのは名前を指定してないから
# apply.scala
parameters.get("name").map(normalize).getOrElse(".")

次回はSqueryl。そのうちLiftも?