2011-11-14 10 views

答えて

6

Iの方法として定義します。

sealed abstract class Term 
case class II(x: Term, y: Term) extends Term 
case class I() extends Term { 
    def ∙(o: Term) = II(this, o) 
} 

I() ∙ I()IIを返し、動作します。


あなたが達成しようとしていることはわかりませんが、

4

簡単に言えば、そうではないからです。 objectclassですが、メソッドではなく、メソッドのみが演算子(インフィクスまたは非インフィット)になります。あなたがパターンにそれを使用することができ、オブジェクトとして

は、一致します。

type X = Int ∙ String 
3
:それは2型パラメータを持っていたならば、それは型宣言でそれを使用することになり クラスとして

case a ∙ b => 

これはユニコード記号の使用によるものではありません。私が認識している中立のコンストラクタ構文はありません。あなたはエミールが提案する何を(TermまたはIメソッドを追加)、または暗黙的な変換を使用することができます中置構文を持つオブジェクトを作成したいのであれば:暗黙のバージョンを

sealed abstract class Term 
case class I() extends Term 
case class ∙(x: Term, y: Term) extends Term 

class Ctor_∙(x: Term) { 
    def ∙(y: Term): ∙ = new ∙(x, y) 
} 

object Term { 
    implicit def to_∙(x: Term): Ctor_∙ = new Ctor_∙(x) 
} 
  • をよりPredef.any2ArrowAssocのようなものですタプルを作成します。1 -> 2
  • メソッドを追加すると、より多くのようなList.::
です
関連する問題