Я все еще работаю над своим ScalaTest FeatureSpec DSL.
Мне бы хотелось 3 варианта моей функции given
. Все берут tokens: Any
, а потом либо
A. Блок block: => Unit
, который выполняется позже
given("user visits", the[AdminHomePage]) {
// just code
}
B. Блок block: Any => Unit
, который выполняется позже с токенами
given("user visits", the[AdminHomePage]) {
x: Any => x match {
case ("user visits", pageClass:Class[Page]) =>
startPage(pageClass)
}
}
C. Нет блока, в котором токены обрабатываются другой функцией
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
Как можно устранить неоднозначность или написать единственный метод, который может различать блок (или его отсутствие)?