params
, который содержит параметры запроса, на самом деле является вызовом метода, который возвращает хеш, содержащий параметры. Ваша строка params =
присваивается локальной переменной с именем params
.
После блока if false
Ruby увидел локальную переменную params
, поэтому при последующем обращении к params
в методе локальная переменная имеет приоритет над вызовом метода с тем же именем. Однако, поскольку ваше params =
назначение находится внутри блока if false
, локальной переменной никогда не присваивается значение, поэтому локальной переменной является nil
.
Если вы попытаетесь обратиться к локальной переменной до ее присвоения, вы получите NameError:
irb(main):001:0> baz
NameError: undefined local variable or method `baz' for main:Object
from (irb):1
Однако, если есть присвоение переменной, которой нет в пути выполнения кода, Ruby создал локальную переменную, но ее значение равно nil
.
irb(main):007:0> baz = "Example" if false
=> nil
irb(main):008:0> baz
=> nil
См .: Назначение - локальные переменные и методы в документах Ruby .