Предположим, у меня есть класс:
class MyClass
def my_method
# cool stuff
end
alias :my_method2 :method
end
А теперь я хочу получить все псевдонимы для метода my_method без сравнения со всеми методами объекта.
Предположим, у меня есть класс:
class MyClass
def my_method
# cool stuff
end
alias :my_method2 :method
end
А теперь я хочу получить все псевдонимы для метода my_method без сравнения со всеми методами объекта.
Я не уверен, как это сделать без использования сравнений. Однако, если вы удалите Object.methods, вы можете ограничить количество сделанных сравнений:
def aliased?(x)
(methods - Object.methods).each do |m|
next if m.to_s == x.to_s
return true if method(m.to_sym) == method(x.to_sym)
end
false
end
Немного хака, но вроде работает в 1.9.2 (но не в 1.8 и т.д.):
def is_alias obj, meth
obj.method(meth).inspect =~ /#<Method:\s+(\w+)#(.+)>/
$2 != meth.to_s
end
MyClass.instance_methods(false)
предоставит вам только методы экземпляра, определенные для вашего класса. Это хороший способ избавиться от любых методов-предков. В вашем случае должны отображаться только методы my_method
и my_method2
.
method
относится к вопросу? - person sawa   schedule 03.07.2011