0

我想实现一个包装类,它有不同的可用方法,具体取决于它包装的类型。

我有这样的想法:

case class Wrapper[A](val : A)

case class Wrapper[A : Numeric](val a : A) {
    def add[A](a : A) = new Wrapper(this.a + a)
}

val a = new Wrapper(1.0)
val b = new Wrapper(2.0)
val c = a add b
val d = new Wrapper(new Object)

val e = a add d // Compile Error!

我已经发现,我可以使用Type Class -Pattern 来限制传递的参数,但是当类型不受限制时,这显然会导致错误this

这在 scala 类型系统中甚至可能吗?任何实现类似结果的类型安全模式(中缀符号在这里很重要)将不胜感激。

4

1 回答 1

0

您可以将这种约束直接添加到方法中add

case class Wrapper[A](value : A){
  def add(other : A)(implicit ev : A <%< Numeric[A]) = 
    Wrapper(value.plus( other))
}

调用is notadd的实例将发出编译器错误。ANumeric

更新感谢@AlexIv)

用法:

val a = Wrapper(1.0)
val b = Wrapper(2.0)
val c = a add b
于 2013-09-29T18:38:54.170 回答