मैं कैसे मैं पर्ल में क्या कर सकते हैं के बारे में सोच रहा हूँ कि मैं क्या सामान्यतः तुतलाना में कार्य करें:गतिशील चर
(defvar *verbose-level* 0)
(defun my-function (... &key ((:verbose-level *verbose-level*) *verbose-level*) ...) ...)
इसका मतलब यह है कि my-function
शब्दाडंबर के वर्तमान स्तर पर चलाया जाता है, लेकिन मैं इसे एक पारित कर सकते हैं अलग स्तर है जो अपने सभी कॉल्स भी प्रभावित करेगा:
(defun f1 (&key ((:verbose-level *verbose-level*) *verbose-level*))
(format t "~S: ~S=~S~%" 'f1 '*verbose-level* *verbose-level*)
(f2 :verbose-level 1)
(format t "~S: ~S=~S~%" 'f1 '*verbose-level* *verbose-level*)
(f2 :verbose-level (1+ *verbose-level*))
(format t "~S: ~S=~S~%" 'f1 '*verbose-level* *verbose-level*))
(defun f2 (&key ((:verbose-level *verbose-level*) *verbose-level*))
(format t "~S: ~S=~S~%" 'f2 '*verbose-level* *verbose-level*))
[17]> (f1)
F1: *VERBOSE-LEVEL*=0
F2: *VERBOSE-LEVEL*=1
F1: *VERBOSE-LEVEL*=0
F2: *VERBOSE-LEVEL*=1
F1: *VERBOSE-LEVEL*=0
NIL
[18]> (f1 :verbose-level 4)
F1: *VERBOSE-LEVEL*=4
F2: *VERBOSE-LEVEL*=1
F1: *VERBOSE-LEVEL*=4
F2: *VERBOSE-LEVEL*=5
F1: *VERBOSE-LEVEL*=4
(ध्यान दें कि चर बाइंडिंग बाहर निकलने पर पुनर्स्थापित किए जाते हैं - यहां तक कि असामान्य - कार्यों से)।
मैं पर्ल में ऐसा कुछ कैसे कर सकता हूं?
उदा। misc.pm
में, मेरे पास our $verbose=0;
है। मैं एक फ़ंक्शन कैसे लिखूं जो $verbose
को इसके तर्क के मान से जोड़ देगा और बदले में अपना मूल्य बहाल करेगा?
पर्ल और सीएल के बीच समानताएं देखने के लिए यह बहुत ही मजेदार है। अलग-अलग नामस्थानों (सीएल: चर, कार्य, लेबल, धाराएं, ...; पर्ल: स्केलर, सरणी, हैंश, सब, आईओ, ...)।ओह, और सीएलओएस/मूस स्पष्ट रूप से संबंधित हैं – amon