Ruby 删除内核数组方法
我想知道如何删除方法Ruby 删除内核数组方法,ruby,Ruby,我想知道如何删除方法Kernel.Array.rand。当用户试图调用它时,它应该给出一个错误;任何错误都可以 我试了如下。我尝试了Kernel.Array和Kernel::Array而不是Random,但它们都不起作用 class << Random; self; end.send :remove_method, :rand 甚至可以在“自动完成”选项卡中使用 尝试rand,因为这是避免使用随机方法所必需的。所以我还需要从数组中删除sample和shuffle 但看看我得到了什么
Kernel.Array.rand
。当用户试图调用它时,它应该给出一个错误;任何错误都可以
我试了如下。我尝试了Kernel.Array
和Kernel::Array
而不是Random
,但它们都不起作用
class << Random; self; end.send :remove_method, :rand
甚至可以在“自动完成”选项卡中使用
尝试rand,因为这是避免使用随机方法所必需的。所以我还需要从数组中删除sample和shuffle
但看看我得到了什么:
class << Array; self; end.send :remove_method, :sample
NameError: method `sample' not defined in Class
from (irb):31:in `remove_method'
from (irb):31
class您可以使用undef\u方法
(与remove\u方法
的区别在于undef\u方法
将走上继承链)
什么是Kernel.Array.rand
?Array上没有rand
方法。我更好地解释了我的情况。我以为那也不存在,但请看我编辑的帖子。@CassioS.Cabral:“参数数量错误”错误是关于Kernel.Array
expression的<代码>兰德
没有被调用(由于错误)删除兰德很好,谢谢。我的问题是数组类。我编辑了我的问题,以便能够反映这一点。抱歉误解。@CassioS.Cabral:我要说清楚,问题是您试图从数组的特征类而不是数组本身中删除sample
方法。
class << Array; self; end.send :remove_method, :sample
NameError: method `sample' not defined in Class
from (irb):31:in `remove_method'
from (irb):31
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)
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)