关于受保护 [some_scope] 的工作和 scala 中的继承的困惑

Posted

技术标签:

【中文标题】关于受保护 [some_scope] 的工作和 scala 中的继承的困惑【英文标题】:Confusion regarding working of protected[some_scope] and inheritance in scala 【发布时间】:2011-10-31 03:37:18 【问题描述】:

这个问题是关于 scala 的受保护范围。以下代码完美运行。

//In firstfile.scala

package A 
  class test
    protected[test] var a=0
  


package B
  class test1 extends A.test
    println(a)
  

但是当我把包 B 放到其他文件中时,编译失败,说没有找到值 a

// In secondfile.scala

import A.test
package B
  class test1 extends test
    println(a)
  

我在 intellij 中运行此代码。 这可能是什么原因?两个代码不一样吗?

【问题讨论】:

Scala 能找到 A.test 类吗? 是的,如果我不在 test1 类中使用 'a' 字段,它编译得很好,测试的所有其他公共字段都可以在没有任何问题的情况下使用 【参考方案1】:

我认为你发现了一个错误。我可以使用 Scala IDE 2.0.0-beta9 with Scala 2.9.0-1 在 Eclipse 中重现它。首先,让我们创建 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 一切都在第一次尝试时编译(谁会怀疑)。

更新:

我已经在 Scala IDE bugtracker 上就这个问题开了一张票 #1000567。

【讨论】:

你的意思是它是 intellij IDE 中的一个错误? @codetool 当然,我找不到其他解释。我现在正在 Scala IDE bugtracker 上寻找类似的票证,但仍然没有找到任何东西。 ticket 用于 eclipse 中的 scala ide。但我的错误是在idea intellij中。我该如何举报? @codetool google 在 JetBrains 网站上找到了support page。试试看。

以上是关于关于受保护 [some_scope] 的工作和 scala 中的继承的困惑的主要内容,如果未能解决你的问题,请参考以下文章

“受保护”和“受保护静态”变量有啥区别?

允许用户打印受保护的工作表

关于何时使用私有域和受保护域的困惑

我在特定文件位置有 100 个受密码保护的 Excel 工作簿(2016 年),有 2 个密码我必须解锁它们

为啥受保护的继承会导致 dynamic_cast 失败?

受保护的路由无法与 React 和 Firebase 一起正常工作