7

मैं जावास्क्रिप्ट के arguments सरणी के लिए कुछ इसी तरह की तलाश में हूँ परिभाषित करने के लिए:कैसे एक variadic समारोह

function parent(){ 
    child.apply(this.arguments); 
} 

मैं चर तर्क लंबाई के लिए डॉट नोटेशन है और यह भी इस योजना के apply समारोह के बारे में पता कर रहा हूँ।

यह काम करने के लिए प्रतीत नहीं होता है के रूप में डॉट पहला तर्क होने के लिए लिया जाता है:

(define (parent .) 
      (list .)) 

(parent 1 3 4 6 7) 
Error: bad argument count - received 5 but expected 1: #<procedure (array arg-list)> 

यह काम करता है लेकिन आदर्श नहीं है। मैं अतिरिक्त वाक्य रचना के बिना समारोह कॉल करने के लिए आर्ग सूची निर्धारित करना चाहते हैं:

(define (parent args-list) 
    (apply list args-list)) 


(parent 1 3 4 6 7) 
Error: bad argument count - received 5 but expected 1: #<procedure (array args-list)> 

(parent `(1 3 4 6 7)) 
(1 3 4 6 7) 

उत्तर

9

सही सिंटैक्स है:

(define (parent . args-list) 
    <do something with args-list>) 

इस तरह यह प्रयोग करें:

(parent 1 2 3 4 5) 

प्रक्रिया के अंदर, सभी तर्कों args-list नामक एक सूची के लिए बाध्य होंगे। उपरोक्त स्निपेट में, args-list में '(1 2 3 4 5) होगा इसके मूल्य के रूप में। यह एक उदाहरण है कि योजना में विविध कार्य कैसे काम करते हैं।

पूर्णता के लिए, एक ही तंत्र गुमनाम कार्यों के लिए इस्तेमाल किया जा सकता है, भी (नोटिस args-list है कि नहीं कोष्ठक से घिरा हुआ):

((lambda args-list <do something with args-list>) 1 2 3 4 5) 
3

आप चाहते हैं:

(define (parent . args) 
    args) ; args is a list 

कौन सा list की वास्तव में 'डिफ़ॉल्ट' कार्यान्वयन है।

(define (list . x) x) 

जब (define (parent .) ...) लागू करने त्रुटि संदेश लगता है गलत है, यह भी, कोड पहली जगह में संकलित किया है नहीं करना चाहिए के रूप में यह अवैध वाक्य रचना है। आप जिस चिकन योजना का उपयोग कर रहे हैं उसके संस्करण के साथ एक बग का अर्थ हो सकता है।