Scala 是否可以使方法仅在类/类型构造函数的专用实例中可用?

Scala 是否可以使方法仅在类/类型构造函数的专用实例中可用?,scala,generics,types,infix-notation,Scala,Generics,Types,Infix Notation,我想实现一个包装类,它有不同的方法可用,这取决于它包装的类型 我有这样的想法: 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 Wrap

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

我有这样的想法:

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!
我已经发现,我可以用类型类模式限制传递的参数,但是当
this
的类型不受限制时,这显然会导致错误


这在scala类型的系统中可能吗?任何实现类似结果的类型安全模式(中缀符号在这里很重要)都将受到高度赞赏

您可以直接将此类约束添加到方法
add

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

您的版本错误的原因有:1)在
add
中定义第二个类型参数
A
是没有意义的,它已经在范围2中定义了
new Wrapper(value+other)
是错误的,无法编译我已经修复了它。不是[A:Numeric],我应该用视图显式声明一个证据参数(
当我试图编译它时(最右边的括号是固定的),我得到了
包装器。scala:2:error:not found:type似乎
+
方法不在
Numeric
中。我已将其更改为
plus
val a = Wrapper(1.0)
val b = Wrapper(2.0)
val c = a add b