3

我是 Scala 的新手,有点困惑。在阅读“不耐烦的 Scala”并进行练习时,我尝试了一个结果是字符串“Hello”的所有数值的乘积。我的第一个想法是执行以下操作:

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

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

但是,以下工作:

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

为什么在使用 foldLeft 时,运算符 '*' 需要一个 Int 而不是 Long?是因为列表的内容吗?字符是否隐式转换为整数?

谢谢!

4

1 回答 1

5

(将我的评论推广到答案,以便可以关闭问题。)

这是因为您的初始参数1, 具有类型Int。您可以通过将其更改为来解决此问题1L

于 2013-06-06T00:56:05.737 回答