什么ruby tap方法对{}的影响

时间:2014-08-27 08:46:38

标签: ruby tap

我已经读过Ruby中的tap,但我对下面的代码块感到困惑,

{}.tap do |h|
  # some hash processing
end

任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:17)

#tap方法只是将调用它的对象传递给一个块。在块的末尾,它再次返回相同的对象。这样,您可以链接操作或限制变量范围。

{}.tap { |h| h[:a] = 1 }.size # => 1

您可以将下一个方法链接到此块。并且还避免在您的范围内创建h变量。

答案 1 :(得分:8)

tap是特别有用的,如果你想对哈希做一些修改,然后返回它,例如在返回哈希的方法中。 tap的优势在于,您不必在结尾处公开地返回哈希,并且不需要中间变量。

hash = {}
hash[:a] = 'b'
hash
# => {:a=>"b"}

VS

{}.tap do |hash|
  hash[:a] = 'b'
end
# => {:a=>"b"}

答案 2 :(得分:4)

例如:你想链接删除和每个哈希。

你做不到

hash.delete(:key).each {...}

但可以做到

hash.tap { |h| h.delete(:key) }.each { ... }

这是一种链接方法的好方法。

答案 3 :(得分:2)

tap并没有做任何事情。无论您对块中的h做什么,都是对原始{}所做的任何操作。