在立即散列上返回抽头哈希是否有好处?

时间:2015-04-16 15:19:10

标签: ruby

正在审核的一些代码使用了以下模式:

def some_method
  {}.tap do |data|
    data[:foo] = something
    data[:bar] = something_else
  end
end

我会写这个:

def some_method
  {
    foo: something,
    bar: something_else
  }
end

此处使用tap是否存在技术原因,例如性能,内存,......?

我只能想到两个原因:

  • 次要的上下文信息,因为您可以为哈希命名(非常次要IMO)
  • 在元素之后不需要逗号(但需要其他语法噪音)

1 个答案:

答案 0 :(得分:3)

使用tap,您可以使用条件(或更复杂的逻辑):

def some_method
  {}.tap do |data|
    data[:foo] = something if condition
    data[:bar] = something_else unless condition
  end
end

但即使在这种情况下,我也可能会避免tap并写下:

def some_method
  data = {}
  data[:foo] = something if condition
  data[:bar] = something_else unless condition
  data
end