我试图在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
。
我确信我在这里遗漏了一些非常简单的东西,但我无法弄明白,所以非常感谢任何帮助。
答案 0 :(得分:10)
加号运算符本身不是一个函数,它是一个符号,没有类型。您正在寻找的是以下
val list = List(1,2,3)
(list :\ 0)(_+_)
_ + _是一个匿名函数的简写,它接受两个参数,并在第二个参数传递第二个参数时调用+方法。
答案 1 :(得分:3)
试试这个:
(list :\ 0)(_ + _)
您需要使用通配符来显示要在第一个参数上调用“+”方法的Scala编译器,而不是使用Tuple2作为函数本身的参数。