[英]Why can't we pass a {} block with other parameters to a method in Ruby
當使用其他參數將塊傳遞給使用ruby的方法時,為什么我們必須這樣做
def method4(condition, attribute, &block)
return "No Block" if block.nil?
if condition
block.call
end
puts attribute
end
method4(true,4) do
puts "Hello World"
end
雖然我們不能那樣做
method4(true,4,{puts "Hello World"})
顯然后者在語法上是錯誤的
您只能將其他對象作為參數傳遞,而塊不是Ruby中的對象。 塊是句法構造。
但是它們可以輕松地包裝在Proc
類的對象中。 甚至還有一個特殊的速記運算符:
method4(true, 4, &->{puts 'Hello World'})
上面的代碼的簡短說明:
->{}
在給定的塊周圍創建一個Proc
對象。 由於method4
需要一個塊而不是一個對象,因此您需要“解開”它以再次阻止,這就是與號存在的原因。 如果改為method4
的簽名:
def method4(condition, attribute, proc) # note no ampersand
您也可以在方法調用中省略“&”號。
調用帶塊方法的正確語法是method_name(arguments) { stuff() }
在method4(true,4,{puts "Hello World"})
,花括號會給您帶來語法錯誤,因為它可能是Hash對象,例如: method4(true, 4, {puts: "Hello World"})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.