因此,我正在完成“不耐烦的scala”中的一些练习,其中一个是:
编写一个for
循环,以计算字符串中所有字母的Unicode码的乘积。例如,“Hello”中字符的乘积为9415087488L。
下一个问题是执行相同的操作,但是没有for
循环-这表明我们应该在Scaladoc中检查StringOps
。
我检查了Scaladoc中的RichChar
和StringOps
部分,也许是我看错了或者在错误的地方找了东西,但是我找不到任何能使我匹配其输出的东西。到目前为止,我已经尝试过:
scala> x.foldLeft(1)(_ * _.toInt)
res0: Int = 825152896
scala> x.foldLeft(1)(_ * _.getNumericValue)
res5: Int = 2518992
scala> x.foldLeft(1)(_ * _.intValue())
res6: Int = 825152896
scala> var x = 1
x: Int = 1
scala> for (c <- "Hello") x *= c.toInt
scala> x
res12: Int = 825152896
哪个与他们的输出不匹配。
如何以
for
和non-for
的方式进行此操作?谢谢!
最佳答案
当您执行x.foldLeft(1)(_ * _.toInt)
时,结果类型将推断为Int
,但是9415087488太大了,无法用Int
进行存储。
因此,您需要使用Long
告诉Scala进行存储。
scala> val x = "Hello"
x: java.lang.String = Hello
scala> x.foldLeft(1L)(_ * _.toInt)
res1: Long = 9415087488
scala> var x: Long = 1
x: Long = 1
scala> for (c <- "Hello") x *= c.toInt
scala> x
res7: Long = 9415087488
关于scala - Char或String-> Scala中的Unicode值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11165635/