ये कक्षा विधियां या 'सिंगलटन' विधियां हैं। एक को attr_accessor से परिचित होना चाहिए। हम टेस्ट क्लास में ऐसा कुछ कार्यान्वित कर सकते हैं।
class Klass
def self.add_getter_and_setter(symbol)
module_eval "def #{symbol}; @#{symbol}; end"
module_eval "def #{symbol}=(val); @#{symbol} = val; end"
end
end
class Person < Klass
add_getter_and_setter :name
add_getter_and_setter :phone
end
person = Person.new
person.name = 'John Smith'
person.phone = '555-2344'
person # returns <Person:0x28744 @name="John Smith", @phone="555-2344">
ऊपर के उदाहरण में हम 'डीईएफ़ self.add_getter_and_setter' के साथ वर्ग विधि बनाया है, लेकिन यह एक ही रास्ता नहीं है।
class Klass
class << self # opens the singleton class
def add_getter_and_setter(symbol) # note we dont specify self as it is already within the context of the singleton class
..
end
end
end
विस्तार का उपयोग करना। मॉड्यूल # विस्तार एक विधि है जो क्लास विधियों के साथ कक्षा को विस्तारित करती है इसी तरह विधि मॉड्यूल # में उदाहरण विधियों के साथ एक वर्ग शामिल है।
class Klass
extend(Module.new do
def add_getter_and_setter(symbol)
..
end
end)
end
Klass पहले से ही परिभाषित किया गया है, तो हम इसे फिर से खोलना कर सकते हैं वर्ग पद्धतियां जोड़ने का
class Klass
end
def Klass.add_getter_and_setter(symbol)
..
end
# or
class << Klass
def add_getter_and_setter(symbol)
..
end
end
खैर उन कुछ तरीके मैं कैसे इस बहुत अलग वाक्य रचना करने के लिए यदि आप देखते हैं सिर्फ अपने सभी एहसास जानते हैं वही काम करना
नोट: रेल में एक सामान्य श्रेणी विधि हम सभी का उपयोग 'ढूंढ' है। यह मॉडल वर्ग से सीधे चलाया जाता है।
person = Person.find(1) # finds a person with id:1
स्रोत
2009-08-28 13:41:32
एक मणि भी काम करता है। –