我在Ruby中注意到,当你取消定义一个方法时,它不会取消定义别名:
class Foo
end
Foo.instance_eval do
def bar
puts 'bar'
end
end
Foo.bar # => bar
Foo.instance_eval {alias :baar :bar }
Foo.instance_eval { undef :bar }
Foo.bar # => NoMethodError: undefined method `bar' for Foo:Class
Foo.baar # => bar
通过undef删除该方法时,取消定义与方法关联的所有别名的正确方法是什么?
答案 0 :(得分:1)
您可以通过选择与其相等的所有方法(请参阅here)列出别名为特定方法的所有方法,以便您可以定义如下方法:
class Class
def undef_with_aliases(method_name)
methods.select { |m| method(m) == method(method_name) }.each { |m| instance_eval "undef #{m}" }
end
end
Foo.instance_eval { undef_with_aliases :bar }
Foo.bar # => NoMethodError: undefined method `bar' for Foo:Class
Foo.baar # => NoMethodError: undefined method `baar' for Foo:Class