【问题标题】:Is there a way to overwrite the `{ }` object?有没有办法覆盖`{}`对象?
【发布时间】:2015-12-22 18:41:38
【问题描述】:

我正在尝试使我的程序中的所有哈希都成为 ActiveSupport::OrderedHash。

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

def {} 给我一个语法错误。

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

【问题讨论】:

  • 没有。它不是一个对象,它是一种语法。这就像问“我可以覆盖if
  • 从 1.9 开始,ruby 中的哈希是有序的,那么使用 ActiveSupport::OrderedHash 有什么意义呢?
  • @pleaner 您的问题一样,我们能否覆盖def ()。但我们不能。

标签: ruby-on-rails ruby activesupport


【解决方案1】:

哈希字面量{} 在 Ruby 中是硬编码的,您无法更改它。 {} 将变为 Hash。但是,由于可以修改 Ruby 的类,您可以从 Hash 中删除所有不必要的方法、常量、变量,并将 ActiveSupport::OrderedHash 中的所有内容复制到 Hash 中。

【讨论】:

    【解决方案2】:

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

    另请参阅overloading Ruby's […] Array creation shorthandWhich method is invoked by […] in Ruby?How to intercept the call to constructor of class Hash?

    【讨论】:

      猜你喜欢
      • 2021-07-25
      • 2018-10-05
      • 1970-01-01
      • 2012-09-03
      • 2011-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      相关资源
      最近更新 更多