2011-09-28 8 views
5

मैं अपने प्रोजेक्ट को दस्तावेज करने के लिए यार्ड का उपयोग कर रहा हूं।यार्ड: दस्तावेज़ कस्टम गेटर/सेटर जोड़ी जैसे attr_accessor

attr_accessor :some_attribute 

एक अलग खंड "इंस्टेंस विशेषता सारांश" में बनाए गए यार्ड दस्तावेज़ विशेषताएँ। अब मैं एक और विशेषता है, लेकिन कस्टम सेटर और गेटर साथ

def some_other_attribute 
    ... 
end 

def some_other_attribute= value 
    ... 
end 

तो मूल रूप से मेरे सवाल है, मैं कैसे यार्ड सिर्फ पिछले मामले में attr_accessor, और सूची some_other_attribute भीतर की तरह सेटर/गेटर की यह जोड़ी दस्तावेज़ के लिए प्राप्त कर सकते हैं "इंस्टेंस विशेषता सारांश"?

उत्तर

5

0.8 (जो अभी प्री-रिलीज में है) के रूप में, @!attribute निर्देश यह इंगित करने का अनुशंसित तरीका है कि कोई ऑब्जेक्ट एक विशेषता है। इस निर्देश के पक्ष में @attr_* टैग बहिष्कृत किए गए हैं। तुम भी (0.8.0+ में) कर सकता है:

# @!parse attr_accessor :some_attribute 

कोड है कि जरूरी रूबी द्वारा निष्पादित नहीं पार्स करने के लिए। 0.8 करने से पहले, आप बस सीधे attr_accessor जोड़ सकता है और उसके बाद सेटर/गेटर को फिर से परिभाषित इस प्रकार है:

class MyClass 
    attr_accessor :foo 
    def foo; something_else end 
    def foo=(v) something_else(v) end 
end 

रूबी मन नहीं चाहिए, ruby -w में यह विधि redefinitions के बारे में चेतावनी देगा सिवाय इसके कि। यदि यह आपको बग करता है, तो आप वहां भी undef foo, foo= जोड़ सकते हैं। यह थोड़ा गन्दा है (यदि आप के बारे में परवाह करते हैं), यही कारण है कि हमने @!parse और @!attribute जैसी चीजें जोड़ दीं।

+0

आप कहां परिभाषित करेंगे '@! Parse attr_accessor: some_attribute'? – thomthom

1

आप वर्ग पर @attr टैग का उपयोग करने में सक्षम होना चाहिए:

# @attr [String] name The name of this object. 
class MyClass 
    def name 
    end 
    def name= 
    end 
end 

अन्य टैग (@attr_reader और @attr_writer की तरह) की तुलना में भी सहायक हो सकता है।

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