2011-11-14 40 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

簡而言之,因爲它不是。它是一個object和一個class,但不是一個方法,只有方法可以是運算符(中綴或不)。

作爲一個對象,你可以使用它在模式匹配:

case a ∙ b => 

爲一類,如果它有兩個類型參數,它會用它的類型聲明:

type X = Int ∙ String 
3

這不是由於使用了unicode符號。沒有我意識到的中綴構造函數語法。所以,如果你想創建一箇中綴語法,你可以做什麼埃米爾建議(添加方法TermI)的對象,或使用隱式轉換:

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.::