myproject/one/two
内包myproject
我有一个班级:
abstract class A (two: Buffer[Int])
然后,在包one
内,我有:
object B extends A (Buffer[Int](1, 2, 3)) {
val с = two.map(_ + 1) // ERROR
}
然而,错误说:
对象
map
不是包的成员myproject/one/two
这显然是错误的,因为我应该非常清楚我没有引用这里的包,而是引用局部变量...... two
在{{1}之后也没有显示在上下文辅助中在this.
中,但显示在B
(Scala-IDE)中。这是一个预期的行为,我做错了什么或是一个错误?
更新
(同时由Nicolas建议:D)能够通过将A
指定为two
(公开)来解决名称冲突。起初我没有注意到,但它是私有的,在后继课程中不可用。尽管如此,我仍然在想,Scala为什么以及如何选择一个包而不是说变量不存在或者不可访问?
答案 0 :(得分:3)
它并不像你想象的那么清晰。如果没有修饰符,则两个对于抽象类A类A
是私有的。因此,您a
的声明等同于abstract class A (private[this] A)
。这意味着无法从对象two
中看到字段B
。直接后果是编译器会查看two
B
可见的唯一定义:包two
。