フィボナッチ配列についてこの例を見てから、それをIRBでテストしました。誰かが私のためにそれを打ち破り、定義されているメソッドの中でどのように同じメソッドを使用しているかを私に見せてくれることを望んでいました。このメソッドはどのようにして独自のメソッドをRubyで使用しますか?
def fib(n)
return n if (0..1).include? n
fib(n-1) + fib(n-2) if n > 1
end
フィボナッチ配列についてこの例を見てから、それをIRBでテストしました。誰かが私のためにそれを打ち破り、定義されているメソッドの中でどのように同じメソッドを使用しているかを私に見せてくれることを望んでいました。このメソッドはどのようにして独自のメソッドをRubyで使用しますか?
def fib(n)
return n if (0..1).include? n
fib(n-1) + fib(n-2) if n > 1
end
あなたは二つのことをやっているdef whatever(...)
とメソッドを定義:メソッドを作成し、名前のメソッドスロットに割り当てます。
Rubyでメソッドを呼び出すと、ローカルスコープでそのメソッドが検索されます。 fib
が定義されている現在のオブジェクトを含むメソッドfib
の内部にあります。したがって、の現在のの定義はfib
であり、それを呼び出します。 メソッドが現在のオブジェクト自体の中の現在のオブジェクト上にfib
を再定義した場合、古い定義ではなく新しい定義が使用されるため、現在の部分について言及します。
つまり、名前が呼び出されるたびにの名前に関連付けられたコードが動的に検索されます。
ありがとうダニエルこれはトンを助ける! – ericraio
これは再帰と呼ばれています...時にはプログラミングで登場するパターンです...プログラムするには、ツール/プロセスである必要があります。すでにそこにあるものを逆流させるのではなく、ウィキペディアにあるものを読むだけです...これには、再帰のデパクトの例であるフィボナッチシーケンスの説明が含まれています。
正直言って、このコードスニペットが再帰と呼ばれていて、それが何を意味するのかを調べるのが難しいことはわかりませんでした。 – ericraio
それは、この場合には、fib' 'にないすべての呼び出しが無限ループになってからそれを保つものですfib''に別の呼び出し、につながることに注意することが重要です。いくつかの呼び出しが多すぎてスタックオーバーフロー**エラーが発生する前に呼び出しが多すぎます。 ;) – coreyward