Когда использовать экзистенциальный тип в Scala? - PullRequest
9 голосов
/ 21 марта 2011

Дайте следующие методы:

def beCool[T <: S](args:Array[T]) = {}
def beCool(args:Array[T forSome {type T <:S}]) = {}

Они эквивалентны? Можете ли вы привести несколько примеров, когда стоит отдать предпочтение?

1 Ответ

3 голосов
/ 21 марта 2011

Вам понадобится первый, я думаю, всякий раз, когда вам нужен доступ к T.Простейший пример возвращает элемент args:

def beCool(args: Array[T forSome { type T }]): T = args.head // --> not found: type T
def beCool[T](args: Array[T]): T = args.head // ok

отсутствие доступного типа T в первом более очевидно при использовании подстановочного знака:

def beCool(args: Array[_ <: S]) = ???
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...