Wartość params
, która zawiera parametry żądania, jest w rzeczywistości wywołaniem metody, które zwraca wartość mieszającą zawierającą parametry. Twoja linia params =
przypisuje zmiennej lokalnej o nazwie params
.
Po bloku if false
, Ruby widział lokalną zmienną params
więc jeśli odnoszą się do params
później w metodzie zmienna lokalna ma pierwszeństwo przed wywołaniem metody o tej samej nazwie. Jednak ponieważ twoje zadanie params =
znajduje się w bloku if false
, zmiennej lokalnej nigdy nie przypisuje się wartości, więc zmienna lokalna to nil
.
Jeśli spróbujesz odwołać się do zmiennej lokalnej przed przypisaniem do niego dostaniesz NameError:
irb(main):001:0> baz
NameError: undefined local variable or method `baz' for main:Object
from (irb):1
Jednak jeśli jest przypisanie do zmiennej, która nie jest w ścieżce wykonywania kodu następnie Ruby utworzył zmienną lokalną, ale jej wartość to nil
.
irb(main):007:0> baz = "Example" if false
=> nil
irb(main):008:0> baz
=> nil
"Ruby widział lokalne paramy" naprawdę, Ruby ??? NAPRAWDĘ!!!??? O_o (przepraszam, ale to mnie kosztowało kilka dni ... Widzenie nie jest wykonywane, czyż nie?) – steffen