【发布时间】:2014-09-13 11:01:32
【问题描述】:
我在隐式参数和 tratis 方面遇到了有趣的问题。
我有一个抽象类 Parent 隐含地接受一个整数和 2 个其他参数:
abstract class Parent(a: Int)(implicit str: String, map: Map[String,String]) {/*...*/}
还有一个特征 ClassTrait 将与 Parent 混合并使用隐式:
trait ClassTrait {
val str: String
val map: Map[String,String]
def doSth() = str.length
}
所以现在我想做这样的事情(withnout关键字abstract):
class Child(a: Int)(implicit str: String, map: Map[String,String]) extends Parent(a) with ClassTrait {
def doSth2 = doSth * 10
}
我应该使用什么语法来将隐式参数映射到 trait vals?编译器返回此错误:
foo.scala:10: error: class Child needs to be abstract, since:
value map in trait ClassTrait of type Map[String,String] is not defined
value str in trait ClassTrait of type String is not defined
class Child(a: Int)(implicit str: String, map: Map[String,String]) extends Parent(a) with ClassTrait {
^
one error found
在复杂的例子中,我在 trait 中使用了隐式参数,但由于 trait 不能有任何参数(没有构造函数),我需要再次声明使用的隐式。
感谢您的帮助。
【问题讨论】:
标签: scala inheritance implicit traits