在块内调用def

时间:2011-10-12 19:43:34

标签: scala

如果有任何方法可以从块中调用def

def factor (n: Int) : Int = if (n == 0 ) 1 else  n * factor(n-1)

val i = 1000

i.toString.foreach ( x => sum += factor(x.toInt) )

最后我想得到每个数字的阶乘之和

但似乎def没有返回值,每次都是0

如何解决?

谢谢!

1 个答案:

答案 0 :(得分:7)

问题实际上与Scala本身无关;你的代码和你的def都没问题。问题出在toInt

scala> '3'.toInt
res7: Int = 51

toInt实际上并不将其转换为十进制数字,而是作为unicode(ish?)字符值。这些产生的数字非常大,超出了factor可以处理的范围:

scala> factor(6)
res8: Int = 720

scala> factor(20)
res9: Int = -2102132736

scala> factor(100)
res10: Int = 0

所以改为使用(感谢Luigi)

x.asDigit