在Scala解释器中,加号不起作用。

3

我正在尝试使用Scala解释器中的fold函数对列表进行求和,但它一直给我一个奇怪的错误。当我输入以下内容时:

val list = List(1,2,3)
(list :\ 0)(+)

我希望得到 6,然而解释器显示
error: illegal start of simple expression
(list :\ 0)(+)
             ^

如果我定义了自己的函数
def plus(a: Int, b: Int) = a+b

并调用

(list :\ 0)(plus)

实际上,我得到了6

我确定我错过了一些非常简单的东西,但我无法弄清楚,所以任何帮助都将不胜感激。

2个回答

10

加号操作符本身不是一个函数,它是一个符号并且没有类型。你要找的是以下内容:

val list = List(1,2,3)
(list :\ 0)(_+_)

_+_是一个匿名函数的简写形式,它接受两个参数并在第一个参数上调用+方法,同时将第二个参数传递进去。


3

试试这个:

(list :\ 0)(_ + _)

您需要使用通配符来告诉Scala编译器,您想在第一个参数上调用“+”方法,而不是将Tuple2作为函数参数本身。

抱歉,我之前说错了。实际上上面定义的plus方法是一个Function2,它的apply方法被foldLeft调用。与此同时,+运算符在Int类中被定义为一个方法,因此我们需要告诉Scala编译器我们想要调用哪个对象的+方法。 - Aaron

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接