我仍在ScalaTest FeatureSpec DSL上工作。如何通過塊類型重載Scala方法?
我想要我的given
函數的3個變種。所有取tokens: Any
,然後或者
A. A嵌段block: => Unit
稍後執行
given("user visits", the[AdminHomePage]) {
// just code
}
B. A嵌段與令牌
given("user visits", the[AdminHomePage]) {
x: Any => x match {
case ("user visits", pageClass:Class[Page]) =>
startPage(pageClass)
}
}
C.否塊以後執行block: Any => Unit
,其中令牌由另一功能處理
given("user visits", the[AdminHomePage])
現在,當我定義所有三種方法時
def given(tokens: Any) = ...
def given(tokens: Any)(block: Any => Unit) = block(tokens)
def given(tokens: Any)(block: => Unit) = block
編譯器認爲它們不明確。
ambiguous reference to overloaded definition, both method given in trait GivenWhenThenFeatureSpec of type (tokens: Any)(block: => Unit)Unit and method given in trait GivenWhenThenFeatureSpec of type (tokens: Any)(block: (Any) => Unit)Unit match argument types
如何消除歧義,或者寫出一個可以區分塊(或缺少)的方法?
你的意思是寫'令牌:任何*'還是我失去了一些東西? – 2011-06-09 16:29:44
啊是的,或者說沒有。它是'tokens:Any',參數被打包成一個我匹配的元組(上面的a-la B)。 – 2011-06-09 16:36:00
因此,DSL的最終處理是一種在元組上匹配並且由第一個(非塊)形式觸發的許多情況的方法。塊形式在那裏讓我原型的情況下實現。 – 2011-06-09 16:39:14