我在理解这种语法时遇到了一些困难:
(as: List[A]) => val h = insert(e, as: _*)}
和
def insert(h: H, as: A*): H = as.foldLeft(h)((hh, a) => insert(a, hh))
_*
和A*
的含义是什么?
感谢。
答案 0 :(得分:2)
A*
是一个定义为vararg的参数,它相当于Java中的A...
。
例如:
scala> def f(i: Int*) = i.length
f: (i: Int*)Int
scala> f(1,2,3)
res50: Int = 3
:_*
是一个转换器,允许将List类型的参数转换为vararg。
例如:
scala> f(List(1,2,3):_*)
res51: Int = 3
答案 1 :(得分:1)
def insert(h: H, as: A*): H = as.foldLeft(h)((hh, a) => insert(a, hh))
A *表示vararg:您可以根据需要提供尽可能多的As
(as: List[A]) => val h = insert(e, as: _*)}
在这种情况下,将序列转换为vararg参数(单个列表转换为n个单一参数,类型为A)。
有时这是必要的,因为它在概念层面上没有太大变化(因为你仍然可以在两者上调用折叠,地图等)