在Scala中,如何定义只接受子类型参数的类方法?

时间:2015-01-26 20:52:03

标签: scala generic-type-argument

我试过

def function[T <: this.type](parameter: T)

但它不起作用。

这应该只是一个简单的问题,它太重了,无法定义CanBuildFrom并在每次使用函数之前导入它

1 个答案:

答案 0 :(得分:1)

标准集合使用类型参数对其进行编码。

scala> abstract class X[Repr <: X[Repr]] { def f(r: Repr) }
defined class X

scala> class Y extends X[Y] { def f(y: Y) = ??? }
defined class Y

scala> val y = new Y
y: Y = Y@6ae40994

scala> y f y
scala.NotImplementedError: an implementation is missing
  at scala.Predef$.$qmark$qmark$qmark(Predef.scala:225)
  at Y.f(<console>:8)
  ... 33 elided