我这是一个愚蠢的问题 . 我期待以下代码可以工作,因为 a
有一个 mkString
方法 .
val a = "abc".toCharArray
case class A[T: {def mkString(): String}](i: T) {
val s = i.mkString
}
A(a)
但它给出了以下错误:
错误:(3,16)AnyRef {def mkString():String}不接受类型参数case class A [T:{def mkString():String}](i:T)错误:(4,14)value mkString不是类型参数T val s = i.mkString的成员
我正在使用Scala 2.11.6 .
任何帮助将非常感谢!谢谢 !
2 回答
那里至少有三个错误:
应该是
<:
,而不是:
. 结构类型不是类型类 .def mkString(): String
与def mkString: String
不同 .原始JVM数组对
mkString
等方便的scala方法一无所知 . 你需要一个WrappedArray
.这在这里工作:
类型边界
[A : B]
是一种速记方式,表示类型A
存在类型类B
的实例,因此它们是等效的:您可能正在寻找的语法是
[A <: B]
,这意味着A
必须是B
的子类 .但是你有
mkString
实际上不在Array
类的问题;它在ArrayOps
中定义(带有Array
的隐式转换),如文档中所述:你可以解决这个问题: