我是Scala的新手,我必须编写包含内部函数的示例。例如,在下面给出这个函数的情况下,我理解当执行fib时,它会立即执行最后一行,即fibS(x,0,1),但是当这个函数停止时我没有得到,因为如果返回z,那么'程序再次调用fibS(x,0,1)?感谢
def fib(x: Long ): Long = {
def fibS(i: Long, z: Long, y: Long): Long = {
if (i > 0)
fibS(i-1, z+y, z)
else z
}
fibS(x, 0, 1)
}
答案 0 :(得分:2)
在Scala中定义内部方法是一个范围问题,所以当你从fibS
调用fib
时,你会调用一个函数,一个递归函数,它被隐藏在其他函数中,因为它是在里面定义的fib
函数。
如果您将fibS
移到外面,那么您将获得相同的结果。
答案 1 :(得分:0)
一个小例子。假设您有函数a
和b
以及另一个callBoth
。
def a = { ... }
def b = { ... }
def callBoth = {
a;
b;
}
当你致电a
时会发生什么?当你致电b
时会发生什么?
答案:
a
,程序流程在a
之后继续。b
,程序流程在b
之后继续。b
之后,恰好是callBoth
的返回,这意味着程序流将在调用callBoth
后继续。 fibS
同样发生,只是它是一个函数调用。在上面的示例中,仅调用a
不会触发b
。因此,调用fibS
后会调用它。