Scala中函数对象的varargs出错?

Spi*_*Pig 21 syntax scala variadic-functions

为什么这不起作用?

val f = (args: Int*) => args.sum

error: ')' expected but identifier found.
val f = (args: Int*) => args.sum
                  ^
Run Code Online (Sandbox Code Playgroud)

然而,这非常好

def sum(args: Int*) = args.sum
val f = sum _
Run Code Online (Sandbox Code Playgroud)

这样做

val f: (Int*) => Int = args => args.sum
Run Code Online (Sandbox Code Playgroud)

顺便说一句.我正在使用scala 2.9.1

Jen*_*der 24

我不是规范阅读方面的专家,但看起来匿名函数不支持varargs语法.

比较语言规范中的函数声明与匿名函数的语法

从4.6函数声明和定义

ParamType ::= Type
              | ‘=>’ Type
              | Type ‘*’
Run Code Online (Sandbox Code Playgroud)

6.23匿名函数

Binding ::= (id | ‘_’) [‘:’ Type]
Run Code Online (Sandbox Code Playgroud)

我不知道原因是什么.似乎有理由,但没有一个可以轻易解释.Martin Odersky评论了为匿名函数添加varargs的请求:"这看起来很诱人,但它会拖累很多复杂性(你只需要相信我那个)."

  • "这看起来很诱人,但它会拖得很复杂",语言创造者说.请参阅https://issues.scala-lang.org/browse/SI-3652 (5认同)