scala语法理解_ *和类型*

时间:2013-11-07 18:30:21

标签: scala

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

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

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

_*A*的含义是什么?

感谢。

2 个答案:

答案 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)。

有时这是必要的,因为它在概念层面上没有太大变化(因为你仍然可以在两者上调用折叠,地图等)