2016-09-18 28 views
1
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| end 

紅寶石碼lookes像Vagrant.configure(「2」)做什麼| config | ...完全按照Ruby代碼完成了嗎?

(0..5).each do |i| ... end 

所以

(0..5).each do |i| 
    puts "Value of local variable is #{i}" 
end 

它通過循環0-5,每個項目分配給我,然後在「做......結束」內的代碼會對我做些什麼。

現在讓我們看看

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| end. 

意思呢?

Vagrant.configure(VAGRANTFILE_API_VERSION) 

是通過什麼

(0..5).each 
  • 循環相似(和它遍歷什麼?)
  • 收益在循環中的每個項目,分配給每個項目以 「配置」
  • 然後「do | config | ... end」中的代碼將對「config」項進行一些操作?

回答

2

塊不依賴於循環。這只是一個封閉。當方法調用yield時,調用傳遞的塊。塊執行後,原始方法繼續。

def understanding_blocks 
    puts 1 
    puts yield 
    puts 3 
end 

如果運行:

understanding_blocks do 
    2 
end 

你會看到

1 
2 
3 

在Ruby中,所有的方法都隱含拿塊,這就是爲什麼我沒有確定的說法。雖然我可以。你可以使用block_given?

+0

來測試一個塊是否被賦予了一個方法所以Vagrant.configure(VAGRANTFILE_API_VERSION)是一種方法,它將do .. end塊作爲參數? – searain

+0

就像(0..5).each是一個將塊作爲參數的迭代器方法。 謝謝! – searain

1

它將一個空白塊傳遞給Vagrant.configure。有沒有效果,它可以被省略了,應該是因爲它是多餘的:

Vagrant.configure(VAGRANTFILE_API_VERSION)