有没有办法覆盖`{}`对象?

Is there a way to overwrite the `{ }` object?

我试图让我程序中的所有哈希值都为 ActiveSupport::OrderedHash。

我可以通过 ::Hash = ActiveSupport::OrderedHash 覆盖 Hash.new 构造函数,但 {}.class 仍然是散列。

def {} 给我语法错误。

有人建议这是 this question 的副本,但我认为情况并非如此。我的问题不是关于 Hash 的子类化,而是关于覆盖默认的 { } => Hash 构造函数。

哈希文字 {} 已硬编码在 Ruby 中,您无法更改它。 {} 会变成 Hash。但是,由于Ruby的class是可以修改的,所以可以从Hash中去掉所有不需要的方法、常量、变量,将ActiveSupport::OrderedHash中的所有内容复制到Hash.

只有极少数语言允许您重载文字(我只知道两种:Ioke and Seph)。 Ruby 不是其中之一。

另见 overloading Ruby's […] Array creation shorthand, Which method is invoked by […] in Ruby?, and How to intercept the call to constructor of class Hash?