2009-04-09 14 views
53

यह ऐसा कुछ है जो मुझे थोड़ी देर के लिए परेशान कर रहा है। जब मैं किसी रूबी विधि पाठ में मुद्रित देखते हैं, यह आम तौर पर दिखाई देता है:रूबी दस्तावेज में हैश साइन से पहले विधियां क्यों हैं?

Class#method 

या

#method 

अब, मैं का प्रयोग करेंगे:

Class.method 

क्यों सब रूबी तरीकों से पहले कर रहे हैं एक पाउंड साइन? क्या इसके लिए कोई कारण है? बस उत्सुक।

+0

यह कब वापस आता है? – nafg

उत्तर

14

rdoc docs से: कक्षाएं, स्रोत फ़ाइलों का

नाम, और कोई भी तरीका एक अंडरस्कोर या एक हैश चरित्र से पहले युक्त नाम स्वचालित रूप से टिप्पणी पाठ से हाइपरलिंक कर रहे हैं उनके विवरण।

(जोर जोड़ा।)

95

नोट सम्मेलन है कि:

Class#method 

बजाय

object#method 

कोड में आप object.method होता, अगर objectclass का एक उदाहरण था। कोड में # सम्मेलन का उपयोग नहीं किया जाता है। उदाहरण के तरीकों, और उपयोग वर्णन करने के लिए वर्ग के तरीकों, # वर्णन करने के लिए

उपयोग :::

the RDoc documentation से

। उदाहरण के लिए कोड।

+0

हां, क्षमा करें, कक्षा # विधि। धन्यवाद। –

+1

मुझे पता है कि # कोड में उपयोग नहीं किया जाता है, लेकिन इसका उपयोग क्यों किया जाता है? –

+0

लिंक को जंगली लगती है लेकिन मुझे वर्तमान स्रोत खोजने के लिए पर्याप्त उद्धृत किया गया था: http://ruby-doc.org/documentation-guidelines.html –

7

तुम सब से ऊपर जवाब सूची सही हैं। एक बात मैं जोड़ना होगा कि प्रलेखन शैली आप ने कहा आप

Class.method

perfer होगा आसानी से वर्ग के तरीकों के साथ उलझन में होगा। जब से तुम ऊपर सिंटैक्स का उपयोग माणिक में वर्ग तरीकों कॉल कर सकते हैं:

class Foo 
    def self.say_hi 
    puts "hi" 
    end 
end 

Foo.say_hi # => prints "hi" 
27

# अंकन String#upcase की तरह, विहित instance विधि का उल्लेख किया जाता है। द। mystring.upcase जैसे किसी विशेष उदाहरण की विधि को संदर्भित करने के लिए नोटेशन का उपयोग किया जाता है। भेद यह इंगित करने के लिए नहीं किया जाता है कि एक वर्ग विधि 'अपकेस' मौजूद है।

17

मुझे अभी एहसास हुआ कि अन्य कोई भी जवाब प्रश्न के सबसे छोटे पहलू को स्पर्श नहीं करता है: # साइन इन क्यों करें?

मैं दो सिद्धांत है:

  1. यह स्मालटाक, जहां प्रतीकों (:sym के बजाय) #sym लिखा जाता है के रूप में वे रूबी में हैं से आ सकते हैं। तो, आप एक विधि वस्तु (के रूप में एक विधि बुला के खिलाफ) है, तो आप Array >> #new. की तरह कुछ कहेंगे को उल्लेख करने के लिए (>> अपने आप में एक विधि है कि विधि इसे करने के लिए पारित कर दिया रिटर्न है। तो चाहते हैं, रूबी में Array.method :new होगा।) स्मॉलटाक दस्तावेज़ में, विधियों को आमतौर पर Class>>method के रूप में जाना जाता है, लेकिन रुबी Class:method में अधिक समझदारी होगी, सिवाय इसके कि यह आसानी से Class::method से उलझन में है। इसलिए, Class#method चुना गया था।
  2. मेरा अन्य सिद्धांत यह है कि यह बस चुना गया था क्योंकि # रूबी में टिप्पणी चरित्र है।

एक निश्चित उत्तर केवल उस सम्मेलन का आविष्कार किया जा सकता है। यदि इसका आविष्कार प्रोग्रामिंग रूबी पुस्तक के लिए किया गया था, तो यह डेव थॉमस या एंडी हंट होगा, लेकिन मुझे इस तरह का संदेह है। 2001 में किताब आई, रूबी ने 1 99 3 में शुरू किया, वे पहले से तरीकों का जिक्र कैसे कर रहे थे?

+1

मैंने सुना है कि व्यावहारिक प्रोग्रामर ने रूबी के लिए प्रलेखन भी बनाया है (वे दस्तावेज को बीज करना चाहते थे ताकि अन्य इसे जोड़ने में "मूर्ख" हों।) गिट आपको 1 99 8 में ले जा सकता है, ताकि आप जांच सकें कि प्रग प्रोग प्रोग्राम्स से पहले 'कक्षा # विधि_नाम' हुआ था या नहीं। –

+0

मैंने तब से सुना है कि प्रोजेक्ट प्रोग्राम्स को स्रोत कोड में जोड़ने से पहले प्रलेखन मौजूद था। –

+1

शायद यह एचटीएमएल में # एंकर वाक्यविन्यास के रूप का अनुकरण कर रहा है। उदाहरण के लिए http://www.somesite.com/somepage#section। – BHS

3

यह JS version of this question में उल्लिखित था, लेकिन ऐसा लगता है कि यह नाम came from JavaDoc है जहां हैश चिह्न का अनुवाद सीधे ऑन-पेज संदर्भ में किया गया है, उदाहरण के लिए href="Component.html#getComponentAt(int, int)"

+0

हू, मैं सोच रहा था कि जावाडोक को उस उपयोग की आवश्यकता क्यों है, लेकिन मुझे इतनी हानिकारक होने की उम्मीद नहीं थी। – JAB

1

हेफ़ का उत्तर (जिसे मैं प्रतिष्ठा की कमी के कारण टिप्पणी नहीं कर सकता), रूबी ने जावाडॉक के उदाहरण का पालन किया, मेरे विचार में सबसे अच्छा अनुमान है। जावाडोक डिजाइनरों को क्लास क्वालिफ़ायर (जिसे उन्होंने हैश का उपयोग किया था) से पैकेज क्वालीफायर (जिसे उन्होंने डॉट का उपयोग किया) को अलग करने के लिए एक तरीका चाहिए या चाहते थे। JavaDoc के @see और @link टैग वाक्य रचना इस तरह दिखता है:

@see package.class#member [optional label] 
{@link package.class#member [optional label]} 

JavaDoc's package.class variant of the @see tag के दस्तावेज और JavaDoc के @link टैग है, जो पहले से ही heff की ओर इशारा किया की दस्तावेज़ देखें।

JavaDoc में, पैकेज का नाम अक्सर, छोड़ा जा सकता है, ताकि केवल क्लास # सदस्य हिस्सा रहता है, जो, रूबी के रूप में समान रूप से अजीब लग क्योंकि जावा कोड Class.member वाक्य रचना, रूबी करता बस के रूप में उपयोग करता है।

यह जानना दिलचस्प होगा कि जावाडोक डिजाइनरों को अलग-अलग वाक्यविन्यास की आवश्यकता क्यों है, जबकि जावा कंपाइलर दोनों उद्देश्यों के लिए बिंदुओं के साथ ठीक करता है।

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