我已经读过Ruby中的tap,但我对下面的代码块感到困惑,
{}.tap do |h|
# some hash processing
end
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激.
Nik*_*nov 18
#tap方法只是将调用它的对象传递给一个块.在块的末尾,它再次返回相同的对象.这样,您可以链接操作或限制变量范围.
{}.tap { |h| h[:a] = 1 }.size # => 1
Run Code Online (Sandbox Code Playgroud)
您可以将下一个方法链接到此块.并且还避免h在您的范围中创建变量.
kof*_*rei 10
tap如果你想对哈希做一些修改并在返回哈希之后,例如在返回哈希的方法中,则特别有用.tap这样做的好处是,您不必在末尾以简洁的方式返回哈希,并且不需要中间变量.
hash = {}
hash[:a] = 'b'
hash
# => {:a=>"b"}
Run Code Online (Sandbox Code Playgroud)
与
{}.tap do |hash|
hash[:a] = 'b'
end
# => {:a=>"b"}
Run Code Online (Sandbox Code Playgroud)
例如:您想将delete链接起来,每个链接都放在一个哈希表上。
你做不到
hash.delete(:key).each {...}
Run Code Online (Sandbox Code Playgroud)
但是可以做
hash.tap { |h| h.delete(:key) }.each { ... }
Run Code Online (Sandbox Code Playgroud)
这是链接方法的好方法。
| 归档时间: |
|
| 查看次数: |
5895 次 |
| 最近记录: |