我有两种方法,除了块之外,其中一种方法需要将其块传递给另一种方法。
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
答案 0 :(得分:2)
您可以将&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?
答案 1 :(得分:2)
您可以对yield
执行相同的操作:
def one
two { yield }
end
def two
yield
end