Ruby Tempfile#tap:什么类定义了这个方法及其用途是什么?

时间:2016-09-09 22:53:23

标签: ruby temporary-files httparty

我已经在拉人请求中发现了这段代码,有人对我的某个宝石发了一条代码:

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文件,然后将其写入Tempfile以读取其数据。没有什么花哨的,而且工作正常。

但是我并不习惯Ruby Tempfile,然后我决定阅读its documentation以了解更多信息。但我还没有找到#tap方法。

然后我尝试了File documentation,然后又一次找不到#tap

此方法定义在哪里?

它的用途是什么?

提前致谢!

1 个答案:

答案 0 :(得分:3)

Objectdef foo a = [] a.push(3) a end def foo [].tap do |a| a.push(3) end end

上定义

https://ruby-doc.org/core-2.3.1/Object.html#method-i-tap

它是在Ruby 1.9中引入的。它为块产生自我,然后返回self。我认为一个说明性的例子是它用于从方法中返回一个对象。

你可以这样做。

<system.web>
<httpRuntime executionTimeout="240" maxRequestLength="20480" />
</system.web>

在第一个例子中,数组a被显式返回,并且在第二个tap中用于将块生成为self,然后返回self。