有没有办法覆盖`{}`对象?
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
?。
我试图让我程序中的所有哈希值都为 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
?。