2013-01-10 29 views
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? 

回答

2

一種方法是不使用的第一種方法產量:

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/

2

只是傳遞塊明確

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

def method2(param) 
    yield param if block_given? 
end 

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

我個人不喜歡明確的塊,但據我所知正統說,'method2'應該放棄的說法'&block'做出了'產量如果block_given ?' – tokland

+1

@tokland:同意。更新了帖子。 –

+0

@tokland爲什麼更正統?如果它包含了爲什麼這個特定配方好的動機,答案會更好。 –