您必須使用具有特殊運算符字符的方法來影響Tomasz所暗示的優先順序。這就是爲什麼許多Scala DSL會大量使用運營商的原因。此外,爲什麼一些DSL很難閱讀,如果你不每天與他們合作。
鑑於方法只使用字母,下劃線和數字 - 你將無法影響的事情,這裏是我放在一起爲自己讀取規格後:
因此,沒有在所有知道你的方法簽名,下面的代碼(因爲它的所有字母):如果重命名
someObject.method1(param1).method2(param2).method3(param3)
:
someObject method1 param1 method2 param2 method3 param3
會被解析爲method3
到|*|
或+:+
或其他操作符有意義,你可以實現你想要的:
someObject method1 param1 method2 param2 |*| param3
// same as
someObject.method1(param1).method2(param2.|*|(param3))
例如看出區別:
implicit def pimp(s:String) = new {
def |*|(t:String) = t + s
def switch(t:String) = t + s
}
scala> "someObject" concat "param1" concat "param2" |*| "param3"
res2: java.lang.String = someObjectparam1param3param2
scala> "someObject" concat "param1" concat "param2" switch "param3"
res3: java.lang.String = param3someObjectparam1param2
您可能需要閱讀http://www.manning.com/ghosh/(在行動中的DSL),因爲這將有助於解釋很大。他涵蓋了Ruby,Scala(主要是Scala),Clojure和Groovy。 –