Почему выбираются члены типа Scala с хешем вместо точки? - PullRequest
34 голосов
/ 13 июля 2011

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

Пример: если у нас есть такой класс ...

class Example {
    type Foo = String
}

Почему мы выбираем тип из класса, как этот ...

val example:Example#Foo = "1"

а не так?

val example:Example.Foo = "1"

1 Ответ

43 голосов
/ 13 июля 2011

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

Например:

object MyEnum extends Enumeration {
  val EnumValue = Value
}

val e: MyEnum.Value = MyEnum.EnumValue

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...