[英]How to pass blocks between methods?
除了塊之外,我有兩種方法,但是其中一種方法需要將其塊傳遞給另一種方法。
def one(&block)
two(block)
end
def two(&block)
block.call
end
在實際代碼中,傳遞其他參數, one
是超過two
語法糖。
我希望能夠用一個塊來調用one
和two
。
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.