ruby - 在子类化 Ruby 散列时如何重写 []= 方法?

标签 ruby hash

我有一个扩展哈希的类,我想跟踪哈希键何时被修改。

覆盖 [key]= 语法方法以完成此操作的正确语法是什么?我想插入我的代码,然后调用父方法。

C 方法可以做到这一点吗?我从文档中看到底层方法是

rb_hash_aset(VALUE hash, VALUE key, VALUE val)

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

最佳答案

方法签名为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

关于ruby - 在子类化 Ruby 散列时如何重写 []= 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12989011/

相关文章:

java - 有没有办法在 Java 8 中执行 Ruby every_slice ?

ruby - 在没有 'instance' 引用的情况下调用 Ruby Singleton 的方法

C++: bool 值的二进制表示是否有任何保证?

java - 将两个列表结构链接在一起

ruby - 从 ruby​​ 中的文件中检索哈希

ruby - bundle 安装从错误的目录运行

ruby - 了解:[] use in rpec test

ruby - 在 Cucumber Ruby 中使用 Selenium ChromeDriver 在 W3C 模式下无法调用非 W3C 标准命令 (Selenium::WebDriver::Error::UnknownCommandError)

php - 将 session 状态保存为唯一的 url 以便与他人共享

php - 在 php 中散列(用盐)用户名和密码