2013-05-15 10 views
8

मैं गुण जो आसानी से किया जा सकता है अगर इस तरह विधि कॉल निर्माण के साथ बड़ी संख्या में बनाना चाहते हैं,निर्दिष्ट सूची विधि कॉल

attr_accessor :attr_list 

def attr_list 
    [:x1, :y1, :x2, :y2] 
end 

यह काम नहीं कर रहा। क्या यह हासिल करने का कोई और तरीका है?

किसी भी मदद की सराहना की जाएगी।

उत्तर

14

, यह पता चल

def self.attr_list 
[:x1, :y1, :x2, :y2] 
end 

attr_accessor *attr_list 

स्पष्टीकरण:

रूप attr_accessor एक विधि कॉल जो पैरामीटर सूची उम्मीद है। इसलिए हम सरणी को पास नहीं कर सकते हैं। (*) सरणी को पैरामीटर सूची में परिवर्तित कर देगा।

बस attr_accessor को उत्तीर्ण विशेषता सूची की एक वर्ग विधि लौटने वाली सरणी को परिभाषित करने की आवश्यकता है।

attr_accessible (या कुछ भी समान) के साथ अच्छी तरह से काम करता है।

+0

धन्यवाद - बहुत सराहना –

0

स्वीकार कर लिया समाधान एक माणिक चेतावनी का उत्पादन:

'*' तर्क उपसर्ग के रूप में व्याख्या

एक वैकल्पिक इस तरह कुछ करने के लिए होगा:

def attr_list 
    [:x1, :y1, :x2, :y2] 
end 

attr_list.each { |attr| attr_accessor attr } 

या

ATTR_LIST = [:x1, :y1, :x2, :y2] 
ATTR_LIST.each { |attr| attr_accessor attr } 
2

एक तरह से एक चेतावनी किये बिना यह करने के लिए:

class MyClass 
    ATTR_LIST = [:x1, :y1, :x2, :y2] 
    attr_accessor(*ATTR_LIST) 
end 
संबंधित मुद्दे