कॉफ़ीस्क्रिप्ट ट्यूटोरियल में "स्प्लिट्स" का क्या अर्थ है?


114

इस कॉफीस्क्रिप्ट ट्यूटोरियल को देखते हुए: http://jashkenas.github.com/cfish-script/

मैं काफी नहीं देख पा रहा हूं कि स्पलैट्स किसके लिए है। यह निर्माण क्या है? यह कहां से आता है (ऐतिहासिक रूप से)


और हमेशा की तरह, आपको यह भी पता होना चाहिए कि इसे वनीला जेएस में कैसे लागू किया जा सकता है: arguments+ call: stackoverflow.com/questions/17380315/…
Ciro Santilli 郝海东 should should 事件 法轮功

1
मैं इसे एक पैरामीटर के रूप में सोचना पसंद करता हूं जो "स्प्लिट्ड" (पेंट की तरह) एक अनिश्चित निरंतरता में मिलता है
अरविमन

3
किसी के लिए भी अजगर-झुकाव: यह आपके *argsअंदर है def foo(*args):
मैलीग्री

1
शब्दावली नोट: ES6 समान लेकिन उपसर्ग सिंटैक्स को अपनाया। ईएस 6 प्राप्त करने , ...argsको बाकी मापदंडों का नाम दिया गया है और ...argsएक फ़ंक्शन कॉल / सरणी / ऑब्जेक्ट शाब्दिक रूप से विस्तार किया गया है जिसका नाम स्प्रेड है
बेनी चेर्नियाव्स्की-पास्किन

जवाबों:


199

शब्द "स्प्लैट ऑपरेटर" रूबी से आता है, जहां *चरित्र (कभी-कभी "स्पैट" - जारगॉन फ़ाइल प्रविष्टि कहा जाता है ) का उपयोग यह इंगित करने के लिए किया जाता है कि एक तर्क सूची में एक प्रविष्टि तर्कों की एक सूची को "सोख" चाहिए।

CoffeeScript रूबी शैली सूचकों को अपनाया बहुत पर (देखें जल्दी मुद्दा 16 ), लेकिन डगलस Crockford के सुझाव पर, वाक्य रचना से बदल गया था *xकरने के लिए x...बाद में कुछ हफ़्ते (देखें मुद्दा 45 )। फिर भी, CoffeeScript अभी भी सिंटैक्स को "स्पैट" या "स्पैट ऑपरेटर" के रूप में संदर्भित करता है।

जैसा कि वे वास्तव में करते हैं, argumentsस्पैट्स ऑब्जेक्ट को इस तरह से स्लाइस करते हैं कि स्प्लिट तर्क "अतिरिक्त" तर्क का एक सरणी बन जाता है। सबसे तुच्छ उदाहरण है

(args...) ->

इस मामले में, argsबस की एक सरणी प्रतिलिपि होगी arguments। चंचल तर्क या तो पहले, बाद में या मानक तर्कों के बीच आ सकते हैं:

(first, rest...) ->
(rest..., last) ->
(first, rest..., last) ->

पहले दो मामलों में, यदि फ़ंक्शन को 0-1 तर्क मिलते हैं, तो restएक खाली सरणी होगी। अंतिम स्थिति में, फ़ंक्शन को restगैर-रिक्त होने के लिए 2 से अधिक तर्क प्राप्त करने की आवश्यकता होती है ।

चूंकि जावास्क्रिप्ट एक ही नाम (जिस तरह से सी और जावा करते हैं) के साथ फ़ंक्शन के लिए कई हस्ताक्षर की अनुमति नहीं देता है, अलग-अलग संख्या में तर्कों के साथ काम करने के लिए छप एक विशाल समय-बचतकर्ता है।


2
C # paramsकीवर्ड के समान।
ThatMatthew

मुझे इसे कब उपयोग करने की आवश्यकता होगी?
जेफ स्कॉट वार्ड

1
जब आप उन परिमों की संख्या के बारे में अनिश्चित हों, जिन्हें आप स्वीकार करना चाहते हैं।
भस्मासुर

1
तकनीकी रूप से इसे [वैरिएडिक फंक्शन] ( en.wikipedia.org/wiki/Variadic_function ) या अनिश्चित "एरिटी" के रूप में जाना जाता है । अधिकांश भाषाएं चर तर्कों को इंगित करने के लिए किसी प्रकार के दीर्घवृत्त रूप का उपयोग करती हैं।
लॉरेंस डॉल

1
@JeffScottWard एक आदर्श उदाहरण है सांत्वना। यह किसी भी तर्क को स्वीकार करता है। console.log('this:',variable,'should be replaced with', another_variable);
रोब

13

यदि आप अजगर को जानते हैं, args...लगभग इसी तरह *args, क्योंकि यह आपको सूची के रूप में फ़ंक्शन मापदंडों का इलाज करने की अनुमति देता है

उदाहरण के लिए:

concat = (args...) -> args.join(', ')
concat('hello', 'world') == 'hello, world'
concat('ready', 'set', 'go!') == 'ready, set, go!'

यह काम करता है,

[first, rest...] = [1, 2, 3, 4]
first == 1
rest == [2, 3, 4]

6

स्पैलेट्स ..., var-args के लिए ऑपरेटर के उपयोग के लिए शब्द है (ऐसे कार्य जो एक तर्क संख्या को लेते हैं)।


इसे भी देखें: पायथन के * आर्ग्स और ** क्वार्ग्स, और एक्शनस्क्रिप्ट 3 के बाकी पैरामीटर।
जॉर्डन

3

मुझे लगता है कि यह जावास्क्रिप्ट की तर्कों वस्तु के लिए एक वाक्य रचना चीनी है।

विचार रूबी के स्पैट ऑपरेटर* के रूप में आ सकता है ।


तकनीकी तौर पर, यह एक छोटा सा अधिक है, के रूप में यह प्रयोग किया जा कार्य में बाएं हाथ से दिया, और नाम तर्क के साथ जोड़ा जा सकता है: में (x, rest...) ->, restशामिल नहीं होते x, argumentsकरता है।
कीपला
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.