#scala
#scala
Вопрос:
Укажите следующее для методов:
def beCool[T <: S](args:Array[T]) = {}
def beCool(args:Array[T forSome {type T <:S}]) = {}
Эквивалентны ли они? Можете ли вы привести мне несколько примеров, когда следует предпочесть какой?
Комментарии:
Ответ №1:
Я думаю, вам понадобится первый, когда вам понадобится доступ к 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]) = ???