Почему выбирают члены типа Scala с хешем вместо точки?

В Scala синтаксис выбора типа из classа отличается от синтаксиса выбора любого другого из classа. В том, что первый использует hash как оператор выбора вместо точки. Почему это?

Пример: если у нас есть class вроде …

class Example { type Foo = String } 

Почему мы выбираем тип из этого classа …

 val example:Example#Foo = "1" 

вместо этого?

 val example:Example.Foo = "1" 

    Example#Foo называется проекцией типа и будет соответствовать любому типу Foo любого охватывающего экземпляра типа Example . Если вы пишете тип Example.Foo , компилятор будет искать значение (а не тип ), которое называется Example и будет ссылаться только на его охватывающий тип Foo . Это часто используется в контексте одноэлементных объектов.

    Например:

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

    Если используется Скала . для outlookов типа это приведет к путанице, потому что предыдущий идентификатор можно интерпретировать либо как тип, либо как значение … Следовательно, # . Обратите внимание, что, как пишет @kassens, у Java только есть проекции типа в этом отношении.

    Давайте будем гением компьютера.