2011-09-13 14 views
7

क्या तर्क या सूची जावास्क्रिप्ट में भागों में मुद्रित करने का कोई तरीका है?जावास्क्रिप्ट में तर्कों की सूची कैसे मुद्रित करें?

उदाहरण: समारोह my_assert(a!=b) के भीतर से मैं एक विशेष समारोह कॉल के लिए a!=b, या यहाँ तक 2!=3 प्रिंट करना चाहते हैं।

उत्तर

3

आप नहीं कर सकते। a!=b पहले निष्पादित किया गया है और केवल इसका परिणाम (true या false) आपके फ़ंक्शन को दिया गया है, इसलिए आपको a!=b या 2!=3 वापस पाने का मौका नहीं है।

+0

कारण है कि जब यह वास्तव में प्रश्न पूछा समाधान नहीं करता है क्या यह उत्तर 3 वोट प्राप्त करता है और बदले में बताते हैं एक प्रश्न में एक वाक्यविन्यास त्रुटि जिसमें इतना अधिक वाक्यविन्यास नहीं है? अनुमोदित, यह एक उपयोगी संकेत है, लेकिन मैं यह देखने में असफल रहा कि "सर्वोत्तम" उत्तर के रूप में मतदान करने के लायक कैसे है क्योंकि यह वास्तव में बिल्कुल नहीं है। –

+1

@ जीनियाएस। ... यह सीधे ओपी की चिंताओं को संबोधित करता है ... वे वैल्यू ए और बी के भीतर से मूल्य प्राप्त करना चाहते थे, पास मूल्य में नहीं। प्रश्न पढ़ने में सूक्ष्म परिवर्तन .... – Rondo

2
console.log (arguments) 

कार्य करने के लिए दिए गए तर्कों के प्रिंट होगा, लेकिन आपके मामले में, अपने सभी समारोह बूलियन नहीं है देखता है, क्योंकि a != b पहले मूल्यांकन किया जाएगा, और केवल परिणाम समारोह कॉल में पैरामीटर के रूप पारित कर दिया।

1

उम्म ... यहाँ, मैं इसे आप के लिए गूगल करेंगे :) http://www.seifi.org/javascript/javascript-arguments.html

के रूप में कुछ अन्य लोगों ने बताया, एक परीक्षण में पारित (एक! = ख) केवल आप एक बूलियन मान मिल जाएगा (सच | झूठी) आपके तर्क के रूप में। लेकिन अगर आप myAssert (ए, बी) को कॉल करते हैं, तो आप पेस्ट किए गए लिंक में सलाह के बाद तर्कों का मूल्यांकन कर सकते हैं और उनकी समानता का परीक्षण कर सकते हैं, साथ ही उनके मूल्यों को प्रिंट कर सकते हैं।

+0

मैंने इसे Google किया और यहां समाप्त हो गया ... यह इतना बुरा नहीं है, है ना? :) – Rondo

0

आप इसे नहीं कर सकते हैं।

my_assert(a!=b); 

अभिव्यक्ति a!=b पहले मूल्यांकन किया जाएगा और उसके परिणाम my_assert को दे दिया जाएगा: आप निम्न पंक्ति है जब।

अपने my_assert() समारोह मान लिया जाये कि अपनी खुद की जांच के लिए विशेष रूप से प्रयोग किया जाता है और आप नियंत्रित कर सकते हैं कि यह कैसे काम करता है और क्या आप इसे में पारित आप कुछ इस तरह कर सकता है:

my_assert(a!=b, "a!=b"); 

Ie, के लिए एक अतिरिक्त पैरामीटर पारित परीक्षण किए जा रहे परीक्षण की स्ट्रिंग प्रस्तुति के साथ कार्य करें। जाहिर है कि यह आपको my_assert(a!=b, "a==b"); पर गलती से नहीं रोकता है, और यह घबराहट है, लेकिन मैं इसे करने का एक और तरीका नहीं सोच सकता।

+0

या इसके बजाय 'assertNotEqual (ए, बी) ' – Thilo

+0

अच्छा बिंदु @ थिलो, हालांकि यह अभी भी जोर देने वाले फ़ंक्शन को पारित चर के नामों को नहीं जाने देगा। जाहिर है, मेरे जवाब में मैं एक' assertIsTrue ' (anyexpression) '। – nnnnnn

0

ये रहा:

my_assert = (test) -> 
    str = my_assert.caller.toString() 
    match = /return my_assert\((.*)\)/.exec str 
    console.log match[1], test 

a = '1' 
b = '2' 
do -> my_assert(a!=b) 
do -> my_assert(b!=a) 


> a !== b true 
> b !== a true 

http://jsfiddle.net/m7qRN/

केवल चेतावनी आप क्रम में अलग अनाम प्रक्रियाएं से अपने my_assert कॉल कॉल करनी होगी मज़बूती से जोर कॉल के स्रोत कोड प्राप्त करने में सक्षम होना करने के लिए है ।

कॉफीस्क्रिप्ट में do -> नोटेशन का उपयोग करके इतना बुरा नहीं है।

जेएस में यह है: (function(){my_assert(a!=b)})();

तुम इतनी तरह एक समारोह के रूप में परीक्षण पास कर सकता है:

my_assert -> a!=b

my_assert(function(){a!=b});

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