我想知道如何删除方法Kernel.Array.rand
。当用户试图调用它时,它应该给出错误;任何类型的错误都可以。
我尝试如下。我尝试了Kernel.Array
和Kernel::Array
而不是Random
,但它们也没有用。
class << Random; self; end.send :remove_method, :rand
使用我的IRB,我看到了:
2.0.0-p195 :028 > Kernel.Array.rand
ArgumentError: wrong number of arguments (0 for 1)
from (irb):28:in `Array'
from (irb):28
甚至可以在带标签的自动填充功能中使用。
尝试兰德因为必须避免使用随机方法。所以我需要从数组中删除样本和随机播放。
但看看我得到了什么:
class << Array; self; end.send :remove_method, :sample
NameError: method `sample' not defined in Class
from (irb):31:in `remove_method'
from (irb):31
所以,我仍然知道如何从Array中删除一个方法,在这种情况下应该与Kernel.Array相关。
答案 0 :(得分:5)
您可以使用undef_method
(与remove_method
的区别在于undef_method
会继承继承链)
rand # => 0.3417719504956065
Kernel.send :undef_method, :rand # private method, have to use `send`
rand # ~> -:5:in `<main>': undefined local variable or method `rand' for main:Object (NameError)
Kernel::Array
方法,与类的Array
完全不同。此外,没有必要使用这些特征类构造来混淆代码。你可以这样做:
module Kernel
undef_method :rand
end
class Array
undef_method :sample
end
rand # ~> -:9:in `<main>': undefined local variable or method `rand' for main:Object (NameError)
[1, 2].sample # ~> -:10:in `<main>': undefined method `sample' for [1, 2]:Array (NoMethodError)