加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Scala中函数对象的vararg发生错误?

发布时间:2020-12-16 09:34:50 所属栏目:安全 来源:网络整理
导读:为什么这不行? val f = (args: Int*) = args.sumerror: ')' expected but identifier found.val f = (args: Int*) = args.sum ^ 然而这样做完全正常 def sum(args: Int*) = args.sumval f = sum _ 这样做 val f: (Int*) = Int = args = args.sum 顺便说一句
为什么这不行?

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

error: ')' expected but identifier found.
val f = (args: Int*) => args.sum
                  ^

然而这样做完全正常

def sum(args: Int*) = args.sum
val f = sum _

这样做

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

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

解决方法

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

比较Language Spec中功能声明与匿名函数的语法

从4.6函数声明和定义

ParamType ::= Type
              | ‘=>’ Type
              | Type ‘*’

6.23匿名函数

Binding ::= (id | ‘_’) [‘:’ Type]

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读