gpt4 book ai didi

class - 在包层次结构中具有重复名称的 Scala 包私有(private)

转载 作者:行者123 更新时间:2023-12-04 18:05:46 25 4
gpt4 key购买 nike

所以我了解到在 Scala 中,您可以通过添加修饰符 private[packagename] 来定义特定包范围内的私有(private)内容,其中 packagename 是(显然)您希望引用私有(private)的包的名称。

因此,例如,假设我有一个包 com.mycompany.usefulname,其中的某个类具有声明为 private[mycompany] 的字段 - 这将是可访问的在 com.mycompany.usefulname 中的所有内容中,以及其他类似 com.mycompany.othername 的内容(或仅在 com.mycompany< 中的内容,如果出于某种原因我把东西放在那里)。

我想知道的是:如果我做了一个糟糕的设计,我有两个不同级别的层次结构使用相同的名称,例如包 com.mycompany.mycompany,是有没有一种方法可以指定我希望在哪个 mycompany 中保密?基于Package private modifier in Scala 2.8 ,它似乎对特定的 private[com.mycompany] 无效,那么我怎么能指定它是哪一个呢?

需要说明的是,这纯粹是出于好奇,我实际上并不是想在类层次结构中使用如此模棱两可的名称。

编辑:为了真正了解它的作用,我实现了以下层次结构:

  • 我的公司
    • 我的公司
      • InnerObject.scala
    • 有用的名字
      • InnerObject2.scala
    • OuterObject.scala

InnerObject.scala 如下:

object InnerObject {
private val privateVal = 7
private[mycompany] val packagePrivateVal = 8
val regularVal = 9
}

InnerObject2.scala 实际上是相同的:

object InnerObject2 {
private val privateVal = 7
private[mycompany] val packagePrivateVal = 8
val regularVal = 9
}

从 OuterObject,我可以引用:

  • InnerObject.regularVal
  • InnerObject2.packagePrivateVal
  • InnerObject2.regularVal

regularVal 并不奇怪,因为它是公开的。包 private 似乎在层次结构中上升,直到它找到与 mycompany 的声明匹配的第一个实例。那么,谁能告诉我是否/如何让它引用外部而不是内部?

最佳答案

这是 relevant excerpt (链接 anchor 下的示例)来自 Scala 语言规范:

The following code illustrates the use of qualified private:

package outerpkg.innerpkg
class Outer {
class Inner {
private[Outer] def f()
private[innerpkg] def g()
private[outerpkg] def h()
}
}

Here, accesses to the method f can appear anywhere within OuterClass, but not outside it. Accesses to method g can appear anywhere within the package outerpkg.innerpkg, as would be the case for package-private methods in Java. Finally, accesses to method h can appear anywhere within package outerpkg, including packages contained in it.

规范中的任何地方都没有提及包私有(private)访问修饰符。由此,我认为没有办法处理包名称中的重复路径节点,并且 Scala 将采用它找到的最内层名称,如您所说。

在我看来,这是一件好事,因为重复的名称是多余且令人困惑的。

关于class - 在包层次结构中具有重复名称的 Scala 包私有(private),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26981022/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com