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语法.
比较语言规范中的函数声明与匿名函数的语法
ParamType ::= Type
| ‘=>’ Type
| Type ‘*’
Run Code Online (Sandbox Code Playgroud)
Binding ::= (id | ‘_’) [‘:’ Type]
Run Code Online (Sandbox Code Playgroud)
我不知道原因是什么.似乎有理由,但没有一个可以轻易解释.Martin Odersky评论了为匿名函数添加varargs的请求:"这看起来很诱人,但它会拖累很多复杂性(你只需要相信我那个)."