2013-11-07 5 views

ответ

1
def insert(h: H, as: A*): H = as.foldLeft(h)((hh, a) => insert(a, hh)) 

A * представляет собой vararg: вы можете поставить столько, сколько вы хотите метод

(as: List[A]) => val h = insert(e, as: _*)} 

в этом случае последовательность преобразуется в параметр vararg (единый список преобразуются в n одиночных аргументов, имеющих тип A).

иногда это необходимо, имхо не изменяет слишком много на концептуальном уровне (как вы можете вызвать складка, карты и т.д. на обоих)

2

A* является аргументом определяют как vararg, это эквивалентно A... в Ява.

Exemple:

scala> def f(i: Int*) = i.length 
f: (i: Int*)Int 

scala> f(1,2,3) 
res50: Int = 3 

:_* является трансформатор, который позволит превратить параметров из списка типа в vararg.

Exemple:

scala> f(List(1,2,3):_*) 
res51: Int = 3 
Смежные вопросы