2

如果一个人想屈服于调用者的调用者的阻塞,应该如何进行?我想出了以下内容:

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?
4

2 回答 2

2

只需明确传递块

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

def method2(param)
  yield param if block_given?
end

method1("String") { |x| puts x } # >> String
于 2013-01-10T14:30:21.300 回答
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/

于 2013-01-10T14:31:45.917 回答