在Scala中调用内部函数

时间:2013-11-09 17:33:28

标签: 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
 }
 fibS(x, 0, 1) 
}

2 个答案:

答案 0 :(得分:2)

在Scala中定义内部方法是一个范围问题,所以当你从fibS调用fib时,你会调用一个函数,一个递归函数,它被隐藏在其他函数中,因为它是在里面定义的fib函数。

如果您将fibS移到外面,那么您将获得相同的结果。

答案 1 :(得分:0)

一个小例子。假设您有函数ab以及另一个callBoth

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

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

答案:

    执行
  • a,程序流程在a之后继续。
  • 执行
  • b,程序流程在b之后继续。
  • b之后,恰好是callBoth的返回,这意味着程序流将在调用callBoth后继续。

fibS同样发生,只是它是一个函数调用。在上面的示例中,仅调用a不会触发b。因此,调用fibS后会调用它。