1

私は 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) 
}
4

2 に答える 2

2

Scala で内部メソッドを定義することはスコープの問題であるため、それfibSからfib呼び出すと、関数内で定義されているため、他の関数から隠されている再帰関数である関数を 1 回呼び出すことになりfibます。

外に移動fibSしても、同じ結果が得られます。

于 2013-11-09T18:04:39.990 に答える
0

小さな実例。関数aandbと anotherがあるとします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 に答える