1

我使用类型约束来表示类型AB必须相同。下面,我可以隐式转换 from Ato B,但需要显式转换 from Bto A。这样做的正确方法是什么?

class Pair[A, B](var first: A, var second: B) {
  def swap()(implicit ev: A =:= B) {
    val tmp = second
    second = first
    first = tmp //won't compile without appending .asInstanceOf[A]
  }

  /*
  ...other methods like replaceFirst, replaceSecond that 
     don't require types A, B to be the same
  */
}
4

1 回答 1

2

A =:= B见证Atype 等于 type B。然后你必须告诉编译器B类型是相等的A类型。这样做B =:= A:)

见下文介绍的新ev2参数:

class Pair[A, B](var first: A, var second: B) {
  def swap()(implicit ev:  =:=[A,B], ev2:  =:= [B,A])  {
    val tmp = second
    second = first
    first = tmp
}

顺便说一句:有些人建议:“只使用一个类型参数”。如果您遵循这种方式,您将无法在您的Pair类中定义不需要此类约束的其他方法/函数。

于 2013-10-20T19:07:41.260 回答