【发布时间】:2016-06-17 18:17:39
【问题描述】:
我有这个类层次结构:
class Parent
attr_accessor :params
def initialize
@params = {"original" => "original"}
end
end
class Child < Parent
def params
super
end
def update_params_1
params = {"update" => "update"}
params
end
def update_params_2
temp_var = params
params = temp_var.merge({"update" => "update"})
params
end
def update_params_3
params = params.merge({"update" => "update"})
params
end
end
child = Child.new
child.update_params_1
# => {"update"=>"update"}
child.update_params_2
# => {"original"=>"original", "update"=>"update"}
child.update_params_3
# => undefined method `merge' for nil:NilClass (NoMethodError)
在update_params_3 中,params 是nil。
当涉及到赋值运算符的 RHS 上的方法调用时,我认为 params 可能总是 nil。但事实并非如此。我添加了这个方法来验证 Ruby 是否允许将方法添加到 RHS 上的链中。它按预期工作。
def right_hand_side
temp_var = params.inspect
puts temp_var
end
为什么在将调用链接到merge 之前,Ruby 不解析update_params_3 中的params 调用?为什么paramsnil仅在我为params赋值的情况下?这是有意的还是 Ruby 中的错误?
【问题讨论】:
标签: ruby variable-assignment local-variables