为什么“Hello”.foldLeft(1)(_。toLong * _.toLong)出错?

时间:2013-06-06 00:25:46

标签: scala

我是Scala的新手,有点困惑。在经历“Scala for the Impatient”并进行练习时,我尝试了一个结果是字符串“Hello”的所有数值的乘积。我的第一个想法是做以下事情:

"Hello".foldLeft(1)(_.toLong * _.toLong)

然而,表达式(_.toLong * _.toLong)导致运算符和操作数之间的类型不匹配,期望Int,但它收到了Long。

以下作品:

"Hello".map(_.toLong).reduce(_ * _)

为什么运营商'*'在使用foldLeft时期望使用Int而不是Long?这是因为列表的内容吗?字符是否隐式转换为Ints?

谢谢!

1 个答案:

答案 0 :(得分:5)

(将我的评论提升为答案,以便可以关闭该问题。)

这是因为您的初始参数1的类型为Int。您可以将其更改为1L

来解决此问题