在 Scala 中,从类中选择类型的语法与从类中选择其他任何内容的语法不同。因为前者使用散列而不是点作为选择运算符。这是为什么?
示例:如果我们有这样的课程......
class Example {
type Foo = String
}
为什么我们要从这样的类中选择类型......
val example:Example#Foo = "1"
而不是像这样?
val example:Example.Foo = "1"
Example#Foo
被称为类型投影并且将匹配任何类型Foo
类型的任何封闭实例Example
。如果你写一个类型Example.Foo
,编译器将寻找value(并不是type)称为Example
并将参考其随附的Foo
仅键入。这通常用在单例对象的上下文中。
例如:
object MyEnum extends Enumeration {
val EnumValue = Value
}
val e: MyEnum.Value = MyEnum.EnumValue
如果使用Scala.
对于类型投影,这会导致混乱,因为前面的标识符可以解释为类型或值......因此#
。请注意,正如 @kassens 所写,Javaonly在这方面有类型投影。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)