2008-11-01 43 views
21

所以我有一個Ruby的方法是這樣的:語法把一個塊上的一行

def something(variable, &block) 
    .... 
end 

而且我想這樣稱呼它:

something 'hello' { do_it } 

除ISN」爲我工作,我得到一個語法錯誤。如果我這樣做,相反,它的工作原理:

something 'hello' do 
    do_it 
end 

除了有我那種缺少它是在一行的漂亮的外觀。

我可以看到爲什麼會發生這種情況,因爲它可能看起來像是作爲第二個變量傳遞的哈希,但在變量之間沒有逗號......但我認爲必須有一種方法來處理這是我錯過了。在那兒?

回答

32

你需要圓括號你的論點:

something('hello') { do_it } 

這應該工作。

+0

是的,就是這樣!謝謝。有時候,這是你錯過的最明顯的事情;-) – 2008-11-01 17:28:41

1

如果你想「def something」來接受一個塊,你需要產生數據到該塊。例如:

#to uppercase string 
def something(my_input) 
yield my_input.upcase 
end 

# => "HELLO WORLD" 
something("hello world") { |i| puts i} 
+0

這未必是真實的。你可以不產生任何東西,將塊傳遞給另一種方法,或者選擇忽略它。沒有什麼特別的需要讓這個區塊產生任何東西。 原始問題中的方法被寫入的方式,block passwd將被轉換爲名爲`block`的`Proc`。 – nertzy 2008-11-01 18:28:29

0

呃,怎麼樣:

>> def something(arg1 , &block) 
>> yield block 
>> end 
=> nil 
>> def do_it 
>> puts "Doing it!" 
>> end 
=> nil 
>> something('hello') { do_it } 
"Doing it!" 
=> nil