Scala - 包和变量的混合?

时间:2012-07-04 10:41:17

标签: scala

确实很奇怪。我有以下项目结构:

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为什么以及如何选择一个包而不是说变量不存在或者不可访问?

1 个答案:

答案 0 :(得分:3)

它并不像你想象的那么清晰。如果没有修饰符,则两个对于抽象类A类A是私有的。因此,您a的声明等同于abstract class A (private[this] A)。这意味着无法从对象two中看到字段B。直接后果是编译器会查看two B可见的唯一定义:包two