Ниже мой отрывок, который я попробовал,instance_eval внутри другого метода экземпляра
class Person
def test(arg)
self.class.instance_eval do
define_method(arg) {puts "this is a class method"}
end
end
end
irb(main):005:0> Person.new.test("foo")
=> #<Proc:[email protected]/home/kranthi/Desktop/method_check.rb:4 (lambda)>
irb(main):003:0> Person.foo
NoMethodError: undefined method `foo' for Person:Class
irb(main):007:0> Person.new.foo
this is a class method
=> nil
Здесь я добавить метод класса Person динамически с помощью instance_eval и define_method. Но почему это ведет себя как метод экземпляра ?. Это полностью зависит от себя? Confused. Может кто-нибудь объяснить мне или ссылку ссылку также оценили.
Так что даже если я использую self.class.instance_eval, это не имеет значения, это !! ?? –
Но экземпляр _eval также будет делать то же самое правильно? он добавляет метод в meta_clas правильно? –
Нет, 'instance_eval' выполняет предоставленный блок в контексте объекта, на который он был вызван (также он устанавливает« текущий класс »как метакласс этого объекта, но здесь это не имеет значения, поскольку' define_method' работает над ' self'). Например, 'Person.instance_eval' выполняет блок в контексте объекта Person. –