屈服于呼叫者呼叫者的块的惯用方法是什么?

时间:2013-01-10 14:27:40

标签: ruby

如果一个人想要屈服于来电者的来电者,应如何继续?我想出了以下内容:

def method1(param)
  method2(param) { |x| yield x if block_given? }
end

def method2(param)
  yield(param) if block_given?   # Can I yield from here
end

method1("String") { |x| puts x } # to here in a more elegant way?

2 个答案:

答案 0 :(得分:2)

明确传递该块

def method1(param, &block)
  method2(param, &block)
end

def method2(param)
  yield param if block_given?
end

method1("String") { |x| puts x } # >> String

答案 1 :(得分:2)

一种方法是在第一种方法中不使用yield:

def method1(param, &block)
  method2(param, &block)
end

def method2 param
  yield param if block_given?
end

一元&符表示方法参数列表中的“块槽”。传递块时,可以通过将&放在最终参数名称之前来访问传递的块。它可以以相同的方式传递给其他方法。

您可以在此处查看有关&的大量详细信息:http://ablogaboutcode.com/2012/01/04/the-ampersand-operator-in-ruby/