我想通过调用方法Hash#[]=
动态覆盖方法f
。以下代码不起作用,因为方法中不允许类定义:
def f
class Hash
def []=(k, v)
...
end
end
end
解决方法是将class Hash
放在单独的文件中,然后
def f
require 'my_hash.rb'
end
我想知道是否有办法避免添加单独的文件。
答案 0 :(得分:5)
def f
Hash.send(:define_method, :[]=) do |x, y|
...
end
end
答案 1 :(得分:1)
这是另一种方法:
def f
Hash.class_eval do
def []=(k, v)
#...
end
end
end