关于在scala中保护[some_scope]和继承的工作的困惑
问题描述:
这个问题关于scala的保护范围。以下代码完美运行。关于在scala中保护[some_scope]和继承的工作的困惑
//In firstfile.scala
package A{
class test{
protected[test] var a=0
}
}
package B{
class test1 extends A.test{
println(a)
}
}
但是当我把程序包B在其他一些文件,然后编译失败说没有找到值
// In secondfile.scala
import A.test
package B{
class test1 extends test{
println(a)
}
}
我运行在的IntelliJ这个代码。 这可能是什么原因?这两个代码不一样吗?
答
我想你已经发现了一个错误。我可以在Eclipse中用Scala IDE 2.0.0-beta9 with Scala 2.9.0-1
重现它。首先,让我们创建Foo.scala:
package a
class Foo {
protected[Foo] var x = 0
}
然后Bar.scala:
package b
class Bar extends a.Foo {
println(x) // Error: Not found: value x
}
Eclipse中告诉我们,有一个错误。但清理完一个项目后,这个错误消失了。我检查了一下,用scalac
所有的东西都是第一次编译(谁会怀疑)。
更新:
我在斯卡拉IDE打开错误追踪系统对这个问题一票#1000567。
斯卡拉是否会找到类A.test? –
是的,它编译得很好,如果我不使用test1类中的'a'字段,所有其他公共测试领域都可以毫无疑问地使用 – codecool