3

有没有办法,如何在类型上表达减号运算符?我希望能够做到这一点:

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中使用Cand是有效的...D

4

1 回答 1

2

有两个不同的问题——我只回答你希望调用myMethod失败的用例,如果你两次传递同一个对象。对于前四行,请参阅Miles Sabin 对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) = ???
于 2013-05-23T20:21:17.433 回答