在块内调用def

com*_*com 2 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) )
Run Code Online (Sandbox Code Playgroud)

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

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

怎么解决?

谢谢!

Owe*_*wen 7

这个问题实际上与Scala本身无关; 你的代码和你的def都没事.问题在于toInt:

scala> '3'.toInt
res7: Int = 51
Run Code Online (Sandbox Code Playgroud)

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

scala> factor(6)
res8: Int = 720

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

scala> factor(100)
res10: Int = 0
Run Code Online (Sandbox Code Playgroud)

所以改为使用(感谢Luigi)

x.asDigit
Run Code Online (Sandbox Code Playgroud)

  • `x.asDigit`是最好的方法 (3认同)