Ruby Tempfile#tap:什么 class 定义了这个方法,它有什么用?
Ruby Tempfile#tap: What class defines this method and what is it for?
我在某人对我的一个 gems 提出的拉取请求中找到了这段代码:
source = HTTParty.get(PoliticosBR::DEPUTADOS_URL)
tempfile = Tempfile.new('deputados.xls').tap do |f|
f.write(source.to_s.force_encoding('UTF-8'))
end
想法是使用 HTTParty 获取远程 Excel 文件,然后将其写入临时文件以读取其数据。没什么特别的,它工作正常。
但我不太习惯 Ruby Tempfile,然后我决定阅读 its documentation 以了解更多信息。但是我还没有在那里找到 #tap
方法。
然后我尝试了 File documentation 然后我又找不到关于 #tap
的任何信息。
这个方法在哪里定义的?
它有什么用?
提前致谢!
#tap
是在 Object
上定义的
https://ruby-doc.org/core-2.3.1/Object.html#method-i-tap
它是在 Ruby 1.9 中引入的。它让出 self 到块,然后 returns self。我认为一个说明性的例子是当它用于 return 来自方法的对象时。
你可以做到这一点。
def foo
a = []
a.push(3)
a
end
def foo
[].tap do |a|
a.push(3)
end
end
在第一个示例中,数组 a 被显式 return 编辑,在第二个 tap 中被用于将块生成给 self,然后 return self。
我在某人对我的一个 gems 提出的拉取请求中找到了这段代码:
source = HTTParty.get(PoliticosBR::DEPUTADOS_URL)
tempfile = Tempfile.new('deputados.xls').tap do |f|
f.write(source.to_s.force_encoding('UTF-8'))
end
想法是使用 HTTParty 获取远程 Excel 文件,然后将其写入临时文件以读取其数据。没什么特别的,它工作正常。
但我不太习惯 Ruby Tempfile,然后我决定阅读 its documentation 以了解更多信息。但是我还没有在那里找到 #tap
方法。
然后我尝试了 File documentation 然后我又找不到关于 #tap
的任何信息。
这个方法在哪里定义的?
它有什么用?
提前致谢!
#tap
是在 Object
https://ruby-doc.org/core-2.3.1/Object.html#method-i-tap
它是在 Ruby 1.9 中引入的。它让出 self 到块,然后 returns self。我认为一个说明性的例子是当它用于 return 来自方法的对象时。
你可以做到这一点。
def foo
a = []
a.push(3)
a
end
def foo
[].tap do |a|
a.push(3)
end
end
在第一个示例中,数组 a 被显式 return 编辑,在第二个 tap 中被用于将块生成给 self,然后 return self。