簡體   English   中英

為什么我們不能將帶有其他參數的{}塊傳遞給Ruby中的方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM