ruby在取消定义方法时取消定义别名
我注意到在Ruby中,当您取消定义方法时,它不会取消别名的定义:ruby在取消定义方法时取消定义别名,ruby,Ruby,我注意到在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 `ba
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
当通过“取消定义”删除某个方法时,取消定义与该方法关联的所有别名的正确方法是什么?您可以通过选择与该方法相等的所有方法(请参阅)列出别名为特定方法的所有方法,以便定义如下方法:
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
第二个
Foo.bar
适合我,你的问题中是否缺少undef
?