有没有办法,如何在类型上表达减运算符?我希望能够做到这一点:
trait A
trait B
type C = A with B
type D = C minus A
// type B == D
我知道,这不能直接完成,但也许有人能用一些聪明的伎俩来表达这个操作符......
---编辑
动机:
trait A
object B extends A
object C extends A
object D extends A
def myMethod(one:A,two:A,three:A) = ???
只有一次使用每种类型才有效,因此当此方法的用户为B
参数选择one
时,使用C
和D
是有效的在其他参数......
答案 0 :(得分:2)
有两个不同的问题 - 我只回答你想要调用myMethod
的用例如果你传递两次相同的对象就会失败。对于前四行,请参阅Miles Sabin’s answer与Peter Schmitz关联的问题。
trait =!=[A, B]
implicit def neq[A, B]: A =!= B = null
implicit def neqAmbig1[A]: A =!= A = null
implicit def neqAmbig2[A]: A =!= A = null
trait A
object B extends A
object C extends A
object D extends A
def myMethod[A, B, C](one: A, two: B, three: C)(implicit ev1: A =!= B, ev2: A =!= C, ev3: C =!= B) = ???