2
当method_missing
被调用时,为什么我不能在Object
中看到@obj.instance_variables
?Object中的实例变量在哪里?
module Arena
class Place
def initialize obj
@obj = obj
method_missing_in_obj
@obj.instance_variable_set(:@unit, '10')
puts @obj.instance_variables
yield @obj
end
def method_missing_in_obj
def @obj.method_missing method, *args, &blk
puts @obj.instance_variables
super
end
self
end
end
end
Arena::Place.new(Object.new) do |obj|
puts obj.instance_variable_get(:@unit)
puts obj.foo
end
$> ruby test_me.rb
:
=> @unit
=> 10
=> in `method_missing': undefined method `foo' for #<Object:0x007fd89b1c96e0 @unit="10"> (NoMethodError)