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

对Scala方法调用约定感到困惑,特别是Seq上的sum函数

发布时间:2020-12-16 09:14:02 所属栏目:安全 来源:网络整理
导读:我正在玩新的 Scala IDE( Eclipse 3.6.2 Scala IDE 2.0.0 [Scala 2.9.0]),我试图做一些简单的事情: (1 to 10).sum 这很好,但是我最近也一直在做很多Groovy,我自动写道: (1 to 10).sum() 这第二个版本在IDE中给我一个编译器错误,并显示以下消息: not enoug
我正在玩新的 Scala IDE( Eclipse 3.6.2 Scala IDE 2.0.0 [Scala 2.9.0]),我试图做一些简单的事情:

(1 to 10).sum

这很好,但是我最近也一直在做很多Groovy,我自动写道:

(1 to 10).sum()

这第二个版本在IDE中给我一个编译器错误,并显示以下消息:

not enough arguments for method sum: (implicit num: Numeric[B])B. Unspecified value parameter num.

我在Scala API中看到有两个版本的sum,一个不需要参数,一个代替上面的隐含.我不得不调用零参数的方法没有括号吗?

解决方法

答案是,如果您指定参数列表(即使用括号),则必须在其中指定参数(或者更准确地说,没有默认值的参数).

如果您将参数隐藏在非空参数列表中,那么编译器可以为您注入它们(假设可以在您的范围内找到相关的含义:如第一个例子)

1 to 10 sum

如果你想自己传入参数(在这个例子中没有必要这样做),那么你可以利用Predef.implicitly的优势,它基本上返回不明确的范围内的隐含值(假设有一个).他们在这里的用法是:

(1 to 10).sum(implicitly[Numeric[Int]])
(1 to 10).sum[Int](implicitly)

这在采用多个隐式参数的方法中尤其重要,您可能只希望覆盖一个隐式参数(然后可以隐式地为其他参数使用).例如,在scalaz

aFoldable.sum(implicitly,myMonoid) //uses implicit Foldable but bespoke monoid

关于scaladoc用例的问题;这是一个幻影条目,向您展示如何使用隐含参数列表(或潜在的混淆)方法.该scaladoc条目的存在可以追溯到this notorious question.

(编辑:李大同)

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

    推荐文章
      热点阅读