respond_to method_missing define_method remove_method undef_method instance_eval 6 непонятных фраз на англицком языке, жеваный крот !
respond_to
[1,2,3].respond_to?(:count)
method_missing переопределяя этот метод, он будет вызван в тех случаях когда метода нет
def method_missing(method, *args)
method # имя метода которого нет
args[0] # аргументы переданные в метод
end
define_method() уменьшает объем кода когда нужно создать много методов с однотипным кодом внутри.
@data={
:user="123456",
:tmail="tmail.ru",
:food="free"
}
# Используя метод define_method:
%w(user email food).each do |meth|
define_method(meth) { @data[meth.to_sym] }
end
p user
p tmail
p food
remove_method удаление методов в классе, но не трогаем наследование
class A
def x
puts "x from A class"
end
end
class B < A
def x
puts "x from B Class"
end
remove_method :x
end
obj = B.new
obj.x
undef_method удаление методов то же самое но удаляем и то что наследовали
instance_eval динамически определит метод в экземпляре класса
class A
def x
puts "x from A class"
end
end
class B < A
def x
puts "x from B Class"
end
undef_method :x
end
obj = B.new
obj.instance_eval do
def color
"green"
end
end
p obj.color