在下面的函数共同下界,Scala编译器能够定义的返回类型以在如果/ else表达式中使用的值的最低的共同父类型:定义的参数
def cond(b: Boolean, t: A, f: B) = if (b) t else f
考虑以下层次结构:
class X
class A extends X
class B extends X
上述函数cond
被定义为返回X
类型的值。
但是,如果A
和B
都在cond
函数的定义类型的参数,它的返回类型为Any
:
def cond[A, B](b: Boolean, t: A, f: B) = if (b) t else f
是否有可能使编译器使用类型的最低共同父参数?
我尝试以下的一些变型中,没有成功:
def cond[A, B, R >: A with B](b: Boolean, t: A, f: B): R = if (b) t else f
def cond[A, B, R](b: Boolean, t: A, f: B)(implicit ev1: A <:< R, ev2: B <:< R): R = if (b) t else f
EDIT:上面的问题是过分简化。其实我真正的问题就已经解决了类型参数之一:
class C[A](b: Boolean, t: A) {
def cond[B](f: B) = if(b) t else f
}