class X extends Map[String, String] {
def x(): X = { X() } // can't be compiled
}
无法编译,错误是:
<console>:6: error: not found: value X
def x(): X = { X() } // can't be compiled
为什么找不到X?我看不出如何纠正它。
更新:
我现在知道原因。我想要做的是创建一个扩展HashMap
的类,因为Map()
将返回HashMap
的实例,所以我想我可以扩展Map
。现在,正确的代码应该是:
import scala.collection.immutable.HashMap
class X extends HashMap[String, String] {
def x(): X = { new X() }
}
答案 0 :(得分:13)
我可以建议你尝试不同的方法吗?
扩展集合库是您可以在Scala中执行的更高级的操作之一。要正确完成工作,您需要深入了解更高级的类型,推理,方差,含义和CanBuildFrom
机制。这不是一个初学者可以采取的轻松任务。
另一方面,你实际上需要扩展一个集合是非常罕见的。
回到第一原则......你认为正确的方法是扩展HashMap
,你试图解决什么问题?我几乎可以保证在Scala中有更好的方法。
更新Mk.II
此答案以前包含对集合框架CanBuildFrom
逻辑的描述。根据@ soc的建议,我现在已将该部分答案迁移到FAQ question here
答案 1 :(得分:4)
尝试new X()
代替X()
- 你会收到另一个错误,但它会让你走上正确的道路我相信。
在后一种情况下,它试图在X
表示的表达式上调用apply(例如,假设X
被定义为object X
或{{ 1}})和不试图调用 class X的构造函数。
快乐的编码。
答案 2 :(得分:1)
目前还不清楚你要做什么,但它没有编译的原因是没有名为'X'的字段,函数或方法,并且没有带'apply()的模块'X' '方法。
“如何纠正?”
澄清你想要达到的目标。