1

我是 Scala 新手,我必须编写包含内部函数的示例。例如下面给出这个函数,我知道当执行 fib 时,它会立即执行最后一行,即 fibS(x,0,1),但是我不知道这个函数什么时候停止,因为如果返回 z,不会' t 程序再次调用 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) 
}
4

2 回答 2

2

在 Scala 中定义内部方法是一个作用域问题,因此当您fibS从那时fib起调用一个函数时,您调用了一次函数,一个递归函数,它对其他函数隐藏,因为它是在fib函数内部定义的。

如果你搬到fibS外面,你会得到同样的结果。

于 2013-11-09T18:04:39.990 回答
0

一个小的说明性示例。假设你有函数ab另一个callBoth

def a = { ... }
def b = { ... }
def callBoth = {
  a;
  b;
}

当你打电话a时会发生什么?当你打电话b时会发生什么?

回答:

  • a被执行并且程序流程在之后继续a
  • b被执行并且程序流程在之后继续b
  • 之后b,它恰好是返回callBoth,这意味着程序流程将在任何调用之后继续callBoth

同样的情况也发生在fibS,只是它是一个单一的函数调用。在上面的例子中,a单独调用不会触发b. 因此,调用在调用fibS后返回。

于 2013-11-09T18:59:57.260 回答