タグ

ブックマーク / kmizu.hatenablog.com (2)

  • _ と _ の違い - kmizuの日記

    意味不明なタイトルですね。このエントリの目的は、二つの似た_の使い方が全く異なる意味を持っていることを認識してもらうことです。 最初に結論を言います。Scalaの式中における obj.method _ という使い方(Method Values)と obj.method(_) という使い方(Placeholder Syntax for Anonymous Functions)*1 は全く異なるものです。似た場面で使えることがありますが、展開/コンパイル結果は一般に異なります。これが一番重要な点です*2。 両者の区別は簡単で、 obj.method _ のように、メソッド名の後に一個以上のスペースに加えて、単独で_が現れたら、間違いなくMethod Valuesです(:の後に型注釈が付くこともありますが、それはオフトピックなのでおいておきます)。 それ以外のケースは基的にPlaceholde

    _ と _ の違い - kmizuの日記
  • Scalaによる Expression Problemの解決 (Visitor編) - kmizuの日記

    参考:ジェネリクスによるVisitorパターン拡張の考察 Scalaは元々は、複数の関連しあったクラス群をうまく再利用可能なことにすることも視野にいれていただけあって、こういうのを(オブジェクト指向モデルの中で)簡単に取り扱えます。 trait VisitorsBase {self => trait Node { def accept(v: V) } case class Add(l: Node, r: Node) extends Node { def accept(v: V) { v.visit(this) } } case class Sub(l: Node, r: Node) extends Node { def accept(v: V) { v.visit(this) } } case class Value(value: Int) extends Node { def accep

    Scalaによる Expression Problemの解決 (Visitor編) - kmizuの日記
  • 1