2009-05-28 17 views

उत्तर

1

स्प्लिट ऑपरेटर रूबी 2.4 के रूप में कोर रूबी दस्तावेज़ में खराब रूप से प्रलेखित है। यह भाषा की मुख्य विशेषता है, हालांकि, और स्प्लट ऑपरेटर के लिए स्रोत कोड vm_eval.c में rb_yield_splat(VALUE values) के अंतर्गत पाया जा सकता है।

unit testrb_yield_splat के लिए यह स्पष्ट करता है क्या हो रहा है:

it "yields with passed array's contents" do 
    ret = nil 
    @s.rb_yield_splat([1, 2]) { |x, y| ret = x + y } 
    ret.should == 3 
end 
+0

यह बहुत अच्छा है, लेकिन आप कैसे जानते थे कि स्रोत कहां है? रूबी गिट भंडार में –

+0

मैंने [इसके लिए खोज की] (https://github.com/ruby/ruby/search?l=C&q=splat&type=&utf8=%E2%9C%93)। खोज को सी फाइलों तक सीमित करें, फिर स्रोत कोड को तब तक पढ़ें जब तक आप इसे नहीं पाते। – anothermh

+0

वाह यह बहुत अच्छा है। धन्यवाद। –

7

कुछ त्वरित Google खोज ने यह चालू किया कि यह eval.c में लागू किया गया है। आप फ़ाइल में कुछ स्थानों में "splat" के संदर्भ पा सकते हैं, लेकिन मुझे रूबी के आंतरिक कार्यों के साथ पर्याप्त परिचित नहीं है ताकि इसका कोई अर्थ हो सके।

+0

उस के लिए, मार्टिन धन्यवाद। बस रूबी दुनिया की भावना बनाने की कोशिश कर रहा है। तो मूल रूप से, यदि यह रूबी है और रेल नहीं है, तो स्रोत शायद रूबी में नहीं है, जो समझ में आता है। –

+0

स्प्लट ऑपरेटर कोर रूबी भाषा का हिस्सा है, लाइब्रेरी सुविधा नहीं। इसका उपयोग किसी भी ऑब्जेक्ट पर किया जा सकता है जो #to_ary विधि को परिभाषित करता है, लेकिन जब एकाधिक मानों को एक वैरिएबल में एकत्रित किया जाता है (जैसे 'ए, * बी = 1,2,3,4,5') यह हमेशा एक बना देगा सरणी। – rampion

+0

@ रैंपियन, इसके लिए धन्यवाद। तो मुझे लगता है कि मेरा असली सवाल होगा: क्या कोई "लाइब्रेरी फीचर्स" है (जिसके लिए स्रोत कोड रूबी में है) जिसे "आवश्यकता" की आवश्यकता नहीं है? –

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