2009-05-19 11 views
9

John Nunemaker हाल ही में रूबी में various ways to define class methods बारे में भी ब्लॉग, इन तीन विकल्प दे रही है:रूबी में कक्षा विधियों को परिभाषित करना आप कैसे पसंद करते हैं?

# Way 1 
class Foo 
    def self.bar 
    puts 'class method' 
    end 
end 

# Way 2 
class Foo 
    class << self 
    def bar 
     puts 'class method' 
    end 
    end 
end 

# Way 3 
class Foo; end 
def Foo.bar 
    puts 'class method' 
end 
  • यह करने के लिए अपने पसंदीदा तरीका क्या है?
  • क्या आप उपर्युक्त के अलावा कुछ और पसंद करते हैं?
  • यदि आप एक से अधिक तरीकों से उपयोग करते हैं, तो आप किस परिस्थितियों में उनका उपयोग करते हैं?

उत्तर

12

मैं लगातार मार्ग 1 का उपयोग करें:

class Foo 
    def self.bar 
    puts 'class method' 
    end 
end 

यह वर्बोज़ नहीं है, और यह वर्ग के ही संदर्भ में विधि रहता है।

1

मैं 1 पसंद करता हूं क्योंकि यह संदर्भ संवेदनशील नहीं है। मुझे फ़ाइल के बीच में कूदना पसंद नहीं है और फिर यह देखने के लिए ऊपर या नीचे स्क्रॉल करना है कि इंडेंटेशन का मतलब है कि मैं class << self ब्लॉक में हूं या यदि यह सिर्फ एक नेस्टेड मॉड्यूल है।

0

मैं भी असामान्य रूप में एक विधि जोड़ने के < < देखने (हालांकि मैं खुशी से तार और आईओ साथ < < उपयोग करें)।

मैं Foo.bar से बचता हूं क्योंकि इसका मतलब है खुद को दोहराना।

1

अधिकांश उपयोगकर्ताओं के साथ सहमत हैं। मैं मुख्य रूप से प्रयोग करते हैं

# Way 1 
class Foo 
    def self.bar 
    puts 'class method' 
    end 
end 

कुछ छोटे मतभेद, कर रहे हैं अगर मैं सही ढंग से याद है, कि व्यावहारिक प्रोग्रामर्स Metaprogramming वार्ता (जो मेरा सुझाव है) है, जो कैसे वर्ग कोड कहा जाता है और मार डाला जाता है से संबंधित हैं पर दिखाए जाते हैं ।

वे काफी छोटे थे, हालांकि ज्यादातर चीजें हमें सामान्य आधार पर निपटने की ज़रूरत नहीं है। देखेंगे कि क्या मैं उन्हें देख सकता हूं और इसे पोस्ट कर सकता हूं।

0

मैं वे # 3 का उपयोग करता हूं, लेकिन मुझे लगता है कि वे # 1 भी महान है। यह आपके उपयोग पर निर्भर करता है। यदि आप चाहते हैं कि आपका कोड अन्य मॉड्यूल और कक्षाओं में "कट/पेस्टेबल" हो, तो वे # 1 बेहतर है। मैं वास्तव में कोड को काटने/पेस्ट करने के लिए अधिक दर्द बनाने के लिए वे # 3 का उपयोग करता हूं, बी/सी रूबी का मंत्र "खुद को दोहराएं" नहीं है, इसलिए आपको कोड को अक्सर काट/पेस्ट नहीं करना चाहिए ..

3

मैं आम तौर पर एकल विधियों के लिए def self.foo और कक्षा विधियों के लंबे हिस्सों के लिए class << self पसंद करें। मुझे लगता है कि यह कक्षा विधि भाग और कक्षा परिभाषा के उदाहरण विधि भाग के बीच भेद बनाता है।

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