Посмотрите на это:
obj = MyClass.new
def obj.hello
"hello"
end
obj.hello #=> "hello"
obj.singleton_methods #=> [:hello]
obj.methods.grep :hello #=> [:hello]
obj.instance_eval do
def hello2 ; end
end #
obj.singleton_methods #=> [:hello, :hello2]
Как вы можете видеть вместо использования instance_eval
, вы также можете определить метод непосредственно на объекте.В обоих случаях они попадают в синглтон-класс объекта (собственный класс), к которому можно обратиться через obj.singleton_class
в Ruby 1.9 и идиому class << self ; self; end
в Ruby 1.8.