Function 在Scala中调用内部函数

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 }

我是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) 
}

在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将返回结果