我试图使用下面代码中的高阶函数计算假设列表(1,2,3)的scala列表中元素的阶乘
object HigherOrderFunctionEg{
def main(args :Array[String]){
val input = args(0).toInt
val intiList :List[Int] = List.range(1,input+1)
def factorial(n: Int): Int = {
if (n == 0)
return 1
else
return n * factorial(n-1)
}
def myHigherOrderFn (factorial : Int => Unit, intiList : List[Int]) : Unit =
{
intiList.foreach(factorial)
println(intiList.foreach(factorial))
}
myHigherOrderFn(factorial, intiList)
}
}
当我尝试scala higherorderfunctioneg.scala 3时,我得到的输出只有空大括号(),而我期望的输出是1 2 6
2条答案
按热度按时间vm0i2vca1#
存在多个问题:
factorial
是Int => Int
但你用过Int => Unit
foreach
退货Unit
所以打印结果总是会()
myHigherOrderFun
退货Unit
所以它不是一个真正的函数。这是一个更好的写作方法:
bwitn5fc2#
问题是阶乘的返回类型是
Int => Unit
. 应该是的Int => Int
因为它接受一个整数并返回一个整数。你需要像这样改变你的定义。