Ruby 如何在方法之间传递块?
我有两个方法,除了一个块之外,它们都可以,但是其中一个方法需要将它的块传递给另一个Ruby 如何在方法之间传递块?,ruby,Ruby,我有两个方法,除了一个块之外,它们都可以,但是其中一个方法需要将它的块传递给另一个 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)
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
它将具有与上述相同的输出。请注意,如果没有给一个块,它将引发一个
参数错误:尝试创建没有块的Proc对象
,因此您必须通过调用if block\u gived?
来检查该块是否已给出。您可以将&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
它将具有与上述相同的输出。请注意,如果没有给一个块,它将引发一个
参数错误:尝试创建没有块的Proc对象
,因此您必须通过调用if block\u gived?
来检查该块是否已给出。您可以对yield
执行相同的操作:
def one
two { yield }
end
def two
yield
end
您可以对
收益率执行相同的操作:
def one
two { yield }
end
def two
yield
end
谢谢-我使用了two(&block)
我不知道你可以保留&
作为非参数参数传递块…谢谢-我使用two(&block)
我不知道你可以保留&
作为非参数传递块。。。