在子类化Ruby哈希时如何覆盖[] =方法?

fie*_*lds 3 ruby hash

我有一个扩展Hash的类,我想跟踪修改哈希键的时间.

什么是覆盖[key]=语法方法来实现此目的的正确语法?我想插入我的代码,然后调用父方法.

这可能与C方法有关吗?我从文档中看到底层方法是

rb_hash_aset(VALUE hash, VALUE key, VALUE val)
Run Code Online (Sandbox Code Playgroud)

如何将其分配给括号语法?

小智 6

方法签名是def []=(key, val),并super调用父方法.这是一个完整的例子:

class MyHash < Hash
  def []=(key,val)
    printf("key: %s, val: %s\n", key, val)
    super(key,val)
  end
end

x = MyHash.new

x['a'] = 'hello'
x['b'] = 'world'

p x
Run Code Online (Sandbox Code Playgroud)