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

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

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

但是,可以进行以下工作:
"Hello".map(_.toLong).reduce(_ * _)

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

谢谢!

最佳答案

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

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

10-07 16:51