这可能吗?例如,如果我有:
module Sample
def self.method_name(var, &block)
if var == 6
call_other_method(var, &block)
else
call_other_method(var)
end
end
def self.call_other_method(var, &block)
# do something with var and block, assuming block is passed to us.
end
end
因此,在上面的示例中,如果您调用Sample.method_name
并将其传递给3和块,则不会使用该块,因为输入与条件不匹配。 但这可能吗?你可以选择&block
吗?
我做了一个假设,基于其他堆栈问题,您可以将&block
从一个方法传递到下一个方法,如上所示,如果这是错误的请填写我。 < / p>
答案 0 :(得分:8)
不确定。查看ruby文档中的block_given?
。
http://ruby-doc.org/core-2.2.1/Kernel.html#method-i-block_given-3F
module Sample
def self.method_name(var, &block)
if var == 6
call_other_method(var, &block)
else
call_other_method(var)
end
end
def self.call_other_method(var, &block)
puts "calling other method with var = #{var}"
block.call if block_given?
puts "finished other method with var = #{var}"
end
end
运行时输出为:
calling other method with var = 6
this is my block
finished other method with var = 6
calling other method with var = 3
finished other method with var = 3
答案 1 :(得分:2)
是的,有可能。实际上,您发布的代码已经正常运行。