有誰知道爲什麼下面的代碼不能識別∙作爲有效的中綴運算符?在Scala中使用unicode符號作爲中綴運算符
object Main extends App {
val c = (I() ∙ I())
}
sealed abstract class Term
case class I() extends Term
case class ∙(x: Term, y: Term) extends Term
有誰知道爲什麼下面的代碼不能識別∙作爲有效的中綴運算符?在Scala中使用unicode符號作爲中綴運算符
object Main extends App {
val c = (I() ∙ I())
}
sealed abstract class Term
case class I() extends Term
case class ∙(x: Term, y: Term) extends Term
定義∙
作爲方法上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
。
不知道你想達到什麼,但。
簡而言之,因爲它不是。它是一個object
和一個class
,但不是一個方法,只有方法可以是運算符(中綴或不)。
作爲一個對象,你可以使用它在模式匹配:
case a ∙ b =>
爲一類,如果它有兩個類型參數,它會用它的類型聲明:
type X = Int ∙ String
這不是由於使用了unicode符號。沒有我意識到的中綴構造函數語法。所以,如果你想創建一箇中綴語法,你可以做什麼埃米爾建議(添加∙
方法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.::