2013-03-27 5 views
5

द्वारा ब्लॉक स्वीकार रैपिंग मैं तरीकों कि मैं इस तरह फोन की एक संख्या है। मैं एक विधि कैसे लिखूं जो मेरे लिए ब्लॉक रैपिंग करता है?विधि कॉल में एक ब्लॉक है कि नाम

def in_nested_contexts(&blk) 
    contexts = [:with_this, :with_that, :and_in_this_context] 
    # ... magic probably involving inject 
end 

उत्तर

3

आप वास्तव में बनाया नेस्टेड lambdas या procs, जो आप अंत में कॉल कर सकते हैं करने के लिए inject उपयोग कर सकते हैं। आप अपने दिए गए ब्लॉक की जरूरत है, घोंसला के इंटीरियर होने के लिए, ताकि आप अपने सरणी रिवर्स और प्रारंभिक मूल्य के रूप में है कि ब्लॉक का उपयोग करें, तो सुई से परिणाम के आसपास बाद एक समारोह लपेट:

def in_nested_contexts(&blk) 
    [:with_this, :with_that, :and_in_this_context].reverse.inject(blk) {|block, symbol| 
    ->{ send symbol, &block } 
    }.call 
end 

आप अपने with_this लपेट हैं , puts कथन के पहले और बाद में एट अल विधियां, आप इसे क्रिया में देख सकते हैं:

in_nested_contexts { puts "hello, world" } 
#=> 
    with_this start 
    with_that start 
    context start 
    hello, world 
    context end 
    with_that end 
    with_this end 
+0

बस मुझे जो चाहिए, धन्यवाद! – Julik

संबंधित मुद्दे