0

我在理解这种语法时遇到了一些困难:

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

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

是什么_*意思A*

谢谢。

4

2 回答 2

2

A*是一个定义为 vararg 的参数,它等价A...于 Java。

例子:

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

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

:_*是一个转换器,允许将 List 类型的参数转换为可变参数。

例子:

scala> f(List(1,2,3):_*)
res51: Int = 3
于 2013-11-07T18:55:36.560 回答
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: _*)}

在这种情况下,序列被转换为可变参数(单个列表被转换为具有 A 类型的 n 个单个参数)。

有时这是必要的,恕我直言,它在概念层面上没有太大变化(因为您仍然可以在两者上调用 fold , map 等)

于 2013-11-07T18:37:16.817 回答