2016-09-09 35 views
1

我發現這段代碼在我的寶石之一製成的拉動請求人:Ruby Tempfile#tap:什麼類定義了這個方法,它用於什麼?

source = HTTParty.get(PoliticosBR::DEPUTADOS_URL) 
tempfile = Tempfile.new('deputados.xls').tap do |f| 
    f.write(source.to_s.force_encoding('UTF-8')) 
end 

的想法是得到一個遠程的Excel與HTTParty文件,然後把它寫入一個將它視爲讀取其數據。沒有什麼奇特的,它工作正常。

但我不是很習慣Ruby Tempfile,然後我決定閱讀its documentation以瞭解更多信息。但我還沒有在那找到#tap方法。

然後我試了File documentation,然後再次找不到#tap

此方法在哪裏定義?

這是幹什麼用的?

在此先感謝!

回答

3

#tapObject

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

它在紅寶石1.9引入限定。它產生自我,然後返回自我。我認爲一個說明性的例子是它用於從一個方法返回一個對象。

你可以這樣做。

def foo 
    a = [] 
    a.push(3) 
    a 
end 

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

在第一個示例中,數組a被顯式返回,並且在第二個tap中被用於將塊自行產生,然後返回self。

+0

謝謝!但我仍不明白這是如何適用於我的問題中的特定代碼段。 –

+0

我明白了!它只是將創建的Tempfile「發送」到塊中,以便在其中使用它。 –

+1

是的,它寫入一個臨時文件並返回它 – nikkypx

相關問題