使用冻结常量作为哈希键?

时间:2016-01-16 00:47:59

标签: ruby-on-rails ruby hash constants

我构建了一个小API,它会产生几个具有相似负载的调用,所以我有一个基本有效负载,我在特定于调用的元素中合并,如下所示:

def foo_call
  base_payload.merge({"request.id" => request_id})
end

def biz_call
  base_payload.merge({"request.id" => some_other_thing})
end

def base_payload
  {
    bar: bar,
    baz: baz,
    "request.id" => default_id
  }
end

我的同事建议我使"request.id"成为一个冻结的常量,认为使它成为常量意味着我们可以冻结它意味着我们不会在每次调用时分配一个新的字符串对象,从而节省了一点内存。这看起来像这样:

REQUESTID = "request.id".freeze

def foo_call
  base_payload.merge({REQUESTID => request_id})
end

def biz_call
  base_payload.merge({REQUESTID => some_other_thing})
end

def base_payload
  {
    bar: bar,
    baz: baz,
    REQUESTID => default_id
  }
end

我有点担心,但我无法确定为什么不这样做的任何理由(除了我对新提交的潜在抵抗:>)。我认为将多个哈希中的相同对象作为关键可能会导致奇怪 - 在对象"request.id"中合并可能不会覆盖base_payload中的原始字符串 - 或者我们实际上不会看到任何内存保存,因为哈希无论如何都必须克隆字符串的哈希键,但我不太确定。

我只是过度偏执/抵抗?

0 个答案:

没有答案