4
我試圖創建一個DSL並遇到問題。我有這些定義:斯卡拉 - 省略應用DSL的方法的括號
case class Var(name: String)
case class Lam(v: Var, t: Var)
val (a, b) = (Var("a"), Var("b"))
我希望能夠做到這一點:
scala> \ a b
Lam(Var(a),Var(b))
在括號落下的規則讀了起來,我看到我需要的是把每一個參數鏈功能,所以我創建了一系列執行建設「建設者」類:
class LamBuilderB(v: Var) {
def apply(t: Var) = Lam(v, t)
}
class LamBuilderA {
def apply(v: Var) = new LamBuilderB(v)
}
val \ = new LamBuilderA
我希望這會工作,因爲每個apply
只有一個參數。但是,它似乎並不像下探括號是合法的,因爲apply
它要處理的參數作爲方法名稱:
scala> \(a)(b)
res95: Lam = Lam(Var(a),Var(b))
scala> \ a b
error: value a is not a member of LamBuilderA
\ a b
^
任何想法如何我怎樣才能不帶括號的DSL語法?
獎金問題:我能得到這個?:
scala> \a.b
Lam(Var(a),Var(b))
我當然_hope_你不能得到'\ ab'!重載'''不是我所說的嵌入式DSL的好主意。 –