当 this 绑定到 scala 中的包时,Private[this] 与 private[package] 有什么区别?
What is the difference between Private[this] vs private[package] when this bind to the package in scala?
当 this 绑定到包与 Private[PackageName]
时,我很难理解 Private[this]
例如
这很好用:
package scopeA {
private[scopeA] class PrivateClass1
class PrivateClass2 extends PrivateClass1
}
但这并不
package scopeA {
private[this] class PrivateClass1
class PrivateClass2 extends PrivateClass1 //private class PrivateClass1 escapes its defining scope as part of type scopeA.PrivateClass1
}
但是如果我这样修改第二个:
package scopeA {
private[this] class PrivateClass1
private class PrivateClass2 extends PrivateClass1
}
private[this]
或private
,在最后一个场景中效果相同。
我能看出其中的区别,但我无法用合适的词表达出来。因此我的问题是,当 this 绑定到一个包时, Private[this]
的含义是什么?它与 private[PackageName]
有什么不同,两者之间的确切区别是什么?
有些关于转义范围的内容我不确定是否遵循,为什么包名可以,但这个不行?
this
指的是(可能的)包对象
package com {
package object example {
implicitly[this.type =:= com.example.`package`.type]
}
}
According to the Scala Language Specification, packages are AnyRef values and have types. How does this make sense?
当 this 绑定到包与 Private[PackageName]
时,我很难理解 Private[this]例如
这很好用:
package scopeA {
private[scopeA] class PrivateClass1
class PrivateClass2 extends PrivateClass1
}
但这并不
package scopeA {
private[this] class PrivateClass1
class PrivateClass2 extends PrivateClass1 //private class PrivateClass1 escapes its defining scope as part of type scopeA.PrivateClass1
}
但是如果我这样修改第二个:
package scopeA {
private[this] class PrivateClass1
private class PrivateClass2 extends PrivateClass1
}
private[this]
或private
,在最后一个场景中效果相同。
我能看出其中的区别,但我无法用合适的词表达出来。因此我的问题是,当 this 绑定到一个包时, Private[this]
的含义是什么?它与 private[PackageName]
有什么不同,两者之间的确切区别是什么?
有些关于转义范围的内容我不确定是否遵循,为什么包名可以,但这个不行?
this
指的是(可能的)包对象
package com {
package object example {
implicitly[this.type =:= com.example.`package`.type]
}
}
According to the Scala Language Specification, packages are AnyRef values and have types. How does this make sense?