Function 在Scala中调用内部函数
我是Scala新手,必须编写包含内部函数的示例。例如,给定下面的函数,我知道当执行fib时,它会立即执行最后一行,即fibS(x,0,1),但是我不知道该函数何时停止,因为如果返回z,程序不会再次调用fibS(x,0,1)吗?谢谢Function 在Scala中调用内部函数,function,scala,Function,Scala,我是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 }
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)
}
在Scala中定义内部方法是一个范围问题,因此当您从
fib
调用fibS
时,您只调用一次函数,一个递归函数,它对其他函数隐藏,因为它是在fib
函数中定义的
如果你把fibS移到外面,你会得到同样的结果。一个小的示例。假设您有函数
a
和b
,另一个调用这两个函数
def a = { ... }
def b = { ... }
def callBoth = {
a;
b;
}
当您调用a
时会发生什么?当您调用b
时会发生什么
答复:
- 执行
a
,程序流在a
之后继续
- 执行
b
,程序流在b
之后继续
- 在
b
之后,恰好返回了calleath
,这意味着无论调用什么calleath
,程序流都将继续
同样的情况也发生在fibS上,只是它是一个单一的函数调用。在上面的示例中,单独调用a
不会触发b
。因此,调用fibS
会在调用后返回。此代码不正确-它甚至不会编译,因为从未定义过z
。我想你指的是x
的z
。我不太明白在这里投反对票的原因…所以当遇到返回z时,外部方法fib将被终止,对吗?是的,当fibS结束时,fib将返回结果