2012-07-28 18 views
6

array splicing के लिए कॉफीस्क्रिप्ट दस्तावेज़ों में, पिछला , _ref का उद्देश्य क्या है?कॉफ़ीस्क्रिप्ट के साथ ऐरे splicing, _ref के लिए क्या है?

CoffeeScript:

numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
numbers[3..6] = [-3, -4, -5, -6] 

को संकलित करता है:

var numbers, _ref; 
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; 
[].splice.apply(numbers, [3, 4].concat(_ref = [-3, -4, -5, -6])), _ref; 

उत्तर

7

ऐसा इसलिए है क्योंकि CoffeeScript के टुकड़ा करने की क्रिया आपरेशन टुकड़ा यह सिर्फ सौंपा है वापसी चाहता है, लेकिन इसके बजाय हटा तत्वों splice() देता है।

तो, इस लक्ष्य को हासिल करने के लिए, यह संकलित एक कोड टुकड़ा है कि पहले एक स्थानीय _ref चर करने के लिए टुकड़ा प्रदान करती है में निर्माण, तो comma operator का उपयोग करता splice() बुला के बाद उस चर वापस जाने के लिए।

+0

+1 अल्पविराम ऑपरेटर के लिंक के लिए +1, डगलस क्रॉकफोर्ड इसका उपयोग करने के खिलाफ सिफारिश करता है क्योंकि इससे 'अत्यधिक मुश्किल अभिव्यक्ति' हो सकती है, इसलिए मुझे लगता है कि मैं इसके बारे में भूल गया हूं। जवाब देना असंभव हो सकता है, लेकिन क्या आपको पता है कि कॉफीस्क्रिप्ट उस टुकड़े को वापस करना चाहता है जिसे उसने अभी सौंपा है, इस उदाहरण में दिमाग में, यह किसी भी चीज़ द्वारा उपयोग नहीं किया जाता है ...? धन्यवाद। – AJP

+2

@AJP, शायद क्योंकि यह वही कोड खंड उत्पन्न कर सकता है चाहे कॉलर लौटाए गए मूल्य में रूचि रखता हो या नहीं। दूसरे शब्दों में, बाद के मामले में "ऑप्टिमाइज़िंग" '_ref' बाहर संकलक पर लाए गए अतिरिक्त जटिलता के लायक नहीं हो सकता है। –