簡體   English   中英

如何在方法之間傳遞塊?

[英]How to pass blocks between methods?

除了塊之外,我有兩種方法,但是其中一種方法需要將其塊傳遞給另一種方法。

def one(&block)
  two(block)
end

def two(&block)
  block.call
end

在實際代碼中,傳遞其他參數, one是超過two語法糖。

我希望能夠用一個塊來調用onetwo

one { } # => okay
two { } # => ArgumentError: wrong number of arguments (1 for 0)

我可以看到為什么我得到了ArgumentError ,其中two沒有參數。 我不太確定如何對此進行短語但是&block指定在傳入參數后出現的塊,因此出現錯誤。

Ruby 1.9

您可以將&block傳遞給第二個方法,如下所示:

def one(&block)
  two(&block)
end

def two(&block)
  block.call
end

one { puts "Hello World" }
Hello World
#=> nil

更新

你也可以這樣做

def one
  two(&Proc.new)
end

def two(&block)
  block.call
end

它將具有與上面相同的輸出。 請注意,如果沒有給一個塊,它將引發ArgumentError: tried to create Proc object without a block所以你必須通過調用if block_given?來檢查是否給出了塊if block_given?

你可以用yield來做同樣的事情:

def one
  two { yield }
end

def two
  yield
end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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