私は、このクラスの階層構造があります:update_params_3
で`super`が期待通りの順序で解決されないのはなぜですか?
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)
、params
がnil
です。
割り当て演算子のRHSのメソッド呼び出しに関与すると、params
は常にnil
と考えられます。しかし、それは真実ではありません。私はこのメソッドを追加して、RubyがRHSのチェーンにメソッドを追加できることを確認しました。それは期待どおりに動作します。
def right_hand_side
temp_var = params.inspect
puts temp_var
end
はなぜRubyがmerge
への呼び出しを連鎖する前にupdate_params_3
でparams
呼び出しを解決しませんか? params
に値を割り当てた場合にのみ、params
nil
となるのはなぜですか?これはRubyの意図ですか、バグですか?
あなたが私に答えを教えてくれたら、Hmは一見一種のように思えます...今は私は気が気になりません。 –