如何动态覆盖方法

Tie*_*Dad 2 ruby methods metaprogramming

我想Hash#[]=通过调用方法动态覆盖方法f.以下代码不起作用,因为方法内不允许类定义:

def f
  class Hash
    def []=(k, v)
      ...
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

解决方法是放入class Hash一个单独的文件

def f
  require 'my_hash.rb'
end
Run Code Online (Sandbox Code Playgroud)

我想知道是否有办法避免添加单独的文件.

saw*_*awa 5

def f
  Hash.send(:define_method, :[]=) do |x, y|
    ...
  end
end
Run Code Online (Sandbox Code Playgroud)