2010-03-29 11 views
14

के रूप में सरणी के मूल्यों को गुजरने के लिए कॉल विधि वर्तमान में मैं इस समस्या पर फंस गया हूं। मैंने अपने द्वारा बनाई गई कक्षा में method_missing फ़ंक्शन में शामिल किया है। जब कोई फ़ंक्शन कहा जाता है जो अस्तित्व में नहीं है, तो मैं दूसरे फ़ंक्शन को सभी पैरामीटर के रूप में तर्क सरणी को पास करने के लिए एक और फ़ंक्शन कॉल करना चाहता हूं। क्या किसी को ऐसा करने का कोई तरीका पता है? उदाहरण के लिए, मैं इस तरह कुछ करने के लिए करना चाहते हैं:रूबी - प्रत्येक पैरामीटर

class Blah 
    def valid_method(p1, p2, p3, opt=false) 
     puts "p1: #{p1}, p2: #{p2}, p3: #{p3}, opt: #{opt.inspect}" 
    end 

    def method_missing(methodname, *args) 
     if methodname.to_s =~ /_with_opt$/ 
      real_method = methodname.to_s.gsub(/_with_opt$/, '') 
      send(real_method, args) # <-- this is the problem 
     end 
    end 
end 

b = Blah.new 
b.valid_method(1,2,3)   # output: p1: 1, p2: 2, p3: 3, opt: false 
b.valid_method_with_opt(2,3,4) # output: p1: 2, p2: 3, p3: 4, opt: true 

(ओह, और btw, ऊपर के उदाहरण मेरे लिए काम नहीं करता है)

संपादित

यह वह जगह है कोड है कि, काम करता है प्रदान की उत्तर के आधार पर (वहाँ कोड में कोई गलती है ऊपर):

class Blah 
    def valid_method(p1, p2, p3, opt=false) 
     puts "p1: #{p1}, p2: #{p2}, p3: #{p3}, opt: #{opt.inspect}" 
    end 

    def method_missing(methodname, *args) 
     if methodname.to_s =~ /_with_opt$/ 
      real_method = methodname.to_s.gsub(/_with_opt$/, '') 
      args << true 
      send(real_method, *args) # <-- this is the problem 
     end 
    end 
end 

b = Blah.new 
b.valid_method(1,2,3)   # output: p1: 1, p2: 2, p3: 3, opt: false 
b.valid_method_with_opt(2,3,4) # output: p1: 2, p2: 3, p3: 4, opt: true 

उत्तर

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