Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ruby在取消定义方法时取消定义别名_Ruby - Fatal编程技术网

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

我注意到在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

当通过“取消定义”删除某个方法时,取消定义与该方法关联的所有别名的正确方法是什么?

您可以通过选择与该方法相等的所有方法(请参阅)列出别名为特定方法的所有方法,以便定义如下方法:

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