kei*_*ter 34 syntax type-systems scala
在Scala中,从类中选择类型的语法与从类中选择其他任何类型的语法不同.前者使用散列作为选择运算符而不是点.这是为什么?
示例:如果我们有这样的类......
class Example {
type Foo = String
}
Run Code Online (Sandbox Code Playgroud)
为什么我们从这个类中选择类型......
val example:Example#Foo = "1"
Run Code Online (Sandbox Code Playgroud)
而不是像这样?
val example:Example.Foo = "1"
Run Code Online (Sandbox Code Playgroud)
Jea*_*let 43
Example#Foo
被称为类型投影,将匹配任何类型Foo
的任何类型的封闭实例Example
.如果编写类型Example.Foo
,编译器将查找调用的值(而不是类型),Example
并Foo
仅引用其封闭类型.这通常用于单例对象的上下文中.
例如:
object MyEnum extends Enumeration {
val EnumValue = Value
}
val e: MyEnum.Value = MyEnum.EnumValue
Run Code Online (Sandbox Code Playgroud)
如果Scala用于.
类型投影,这会导致混淆,因为前面的标识符可以解释为类型或值...因此#
.请注意,正如@kassens所写,Java 在这方面只有类型预测.
归档时间: |
|
查看次数: |
3272 次 |
最近记录: |