Когда вы определяете метод с помощью def whatever(...)
, вы делаете две вещи: создаете метод и присваиваете его указанному слоту метода.
Когда вы вызываете метод в Ruby, он будет искать его в локальной области видимости; внутри метода fib
, который включает текущий объект, для которого определено fib
. Таким образом, он находит текущее определение fib
и вызывает его.
Я упоминаю текущую часть, потому что если метод fib
переопределит fib
для текущего объекта внутри себя, будет использовано новое определение, а не старое определение.
То есть: он будет динамически находить код, связанный с name каждый раз, когда имя вызывается.