我是Scala的新手,有些困惑。在进行“不耐烦的scala”练习时,我尝试了一种方法,其结果是字符串“Hello”的所有数值的乘积。我的第一个想法是执行以下操作:
"Hello".foldLeft(1)(_.toLong * _.toLong)
但是,表达式(_.toLong * _.toLong)导致运算符和操作数之间的类型不匹配,预期为Int,但接收到Long。
但是,可以进行以下工作:
"Hello".map(_.toLong).reduce(_ * _)
为什么在使用foldLeft时,运算符'*'期望使用Int而不是Long?是因为列表的内容吗?字符是否隐式转换为Ints?
谢谢!
最佳答案
(将我的评论升级为答案,以便可以关闭问题。)
这是因为您的初始参数1
的类型为Int
。您可以通过将其更改为1L
来解决此问题。