Why does one select Scala type members with a hash instead of a dot?

前端 未结 1 965
难免孤独
难免孤独 2020-11-29 05:50

In Scala, the syntax for selecting a type from a class is different from that of selecting anything else from a class. In that the former uses a hash as the selection operat

相关标签:
1条回答
  • 2020-11-29 06:11

    Example#Foo is called a type projection and will match any type Foo of any enclosing instance of type Example. If you write a type Example.Foo, the compiler will look for the value (and not type) called Example and will refer to its enclosing Foo type only. This is often used in the context of singleton objects.

    For instance:

    object MyEnum extends Enumeration {
      val EnumValue = Value
    }
    
    val e: MyEnum.Value = MyEnum.EnumValue
    

    If Scala used . for type projections, this would lead to confusion because the preceding identifier could be interpreted either as a type or as a value… Hence the #. Note that, as @kassens writes, Java only has type projections in that respect.

    0 讨论(0)
提交回复
热议问题