2013-01-08 31 views
15

के _.identity (मान) के उपयोग की व्याख्या करें कृपया underscore.js के _.identity(value) का उपयोग समझाएं। प्रलेखन से इसे समझने में सक्षम नहीं है (http://underscorejs.org/#identity)।underscore.js

क्या आप इसके उपयोग का कुछ उदाहरण प्रदान कर सकते हैं?

उत्तर

9

यह अनिवार्य रूप से एक ऑपरेशन फ़ंक्शन है। यह जो कुछ भी पारित किया गया था उसका मूल्य देता है।

लाइब्रेरी के भीतर इसे "डिफ़ॉल्ट इटरेटर" के रूप में उपयोग करने के बारे में इसका अर्थ यह है कि अन्य कार्यों में एक वैकल्पिक "इटरेटर" पैरामीटर हो सकता है (जिसे किसी सरणी के प्रत्येक तत्व पर लागू करने के लिए फ़ंक्शन के रूप में उपयोग किया जाता है किसी प्रकार का), यदि कोई इटरेटर पैरामीटर पास नहीं हुआ है, तो पुस्तकालय इसके बजाय इस "नो-ऑप" इटरेटर का उपयोग करेगा और सरणी के तत्व अपरिवर्तित बने रहेंगे।

+4

बस इसके लिए: आप [एनोटेटेड स्रोत] (http://underscorejs.org/docs/underscore.html#section-118) में यह नोप देख सकते हैं। –

+0

@DanLee, मैं टिप्पणी के रूप में टिप्पणी चिह्नित नहीं कर सकता। – SunnyShah

+0

@SunnyShah यह मेरा जवाब नहीं है, बस मेरी टिप्पणी। मुझे लगता है कि आप कुछ मिनटों में जवाब से मैट का जवाब चिह्नित कर सकते हैं। –

9

एक विशिष्ट उदाहरण:

Underscore.js _.each परिभाषित करता है और इस तरह के रूप में।

_.each = function(obj, iterator, context) { 
    ... 
} 

यह इटरेटर एल मान दिखाता है। आपने शायद इस मुहावरे का इस्तेमाल किया हो।

_.each([1, 2, 3], function(el){ 
    console.log(el); 
}); 

यह पुनरावर्तक परिवर्तन के बिना एल मान देता है।

_.each([1, 2, 3], function(el){ 
    return el; 
}); 

फ़ंक्शन जो बिना किसी बदलाव के मूल्य लौटाता है अक्सर होता है। तो Underscore.js फ़ंक्शन को परिभाषित करना चाहता है। Underscore.js फ़ंक्शन _.identity नाम देता है।

_.identity = function(value) { 
    return value; 
}; 

Underscore.js एक डिफ़ॉल्ट इटरेटर का उपयोग करना चाहता है, सब Underscore.js जरूरत कॉल _.identity है।

_.each([1, 2, 3], _.identity); 
+0

कुछ वापस करने के लिए पूरी तरह से _.each का उपयोग नहीं किया जाता है, यह _ _map है: '_.map ([1, 2, 3], फ़ंक्शन (एल) { वापसी एल; }); ' अपने कोड के साथ अपने इरादे को सिग्नल करना अच्छा है। जावास्क्रिप्ट के समान के लिए प्रत्येक और नक्शा बेहतर ढंग से अलग होते हैं, क्योंकि प्रत्येक में फ़ंक्शन परिणाम एकत्र नहीं होते हैं, भले ही इसमें कोई रिटर्न स्टेटमेंट हो। –

28

पहचान युक्त एक जावास्क्रिप्ट कोड पैटर्न सत्यता के आधार पर मूल्यों को फ़िल्टर कर रहा है, उदा।

var a = [null, null, [1,2,3], null, [10, 12], null]; 

a.filter(_.identity) 

पैदावार [ऐरे [3], ऐरे [2]]।

का उपयोग

_.compact(a) 

स्पष्ट है, लेकिन एक lodash का उपयोग या बिल्कुल भी रेखांकित करता है, उदा नहीं हो सकता है

function identity(x) { 
    return x; 
} 

a.filter(identity) 

क्या यह एक अच्छा कोड पैटर्न है कई कारणों से संदिग्ध है, लेकिन यह जंगली में इस्तेमाल किया जा रहा है।

यह बिल्कुल एक एनओयूपी नहीं है। एक एनओओपी उदाहरण में एक अनिवार्य निर्माण है असेंबली, जबकि कार्यात्मक प्रोग्रामिंग में, यह अन्य कार्यों की तरह है कि यह एक मूल्य देता है। अगर पहचान एक एनओयूपी थी, तो सभी शुद्ध कार्यों को भी नोप माना जा सकता था, और यह एक समझदार बात नहीं होगी।