मेरे पास "आईपी", "डेट", "यूआरएल" नामक फ़ंक्शंस का एक सेट है।प्रोग्रामेटिक फ़ंक्शन परिभाषा: यहां "eval" से छुटकारा पाने के लिए कैसे?
इनके साथ, मैं "आईपी-आई", "डेट-इज़" इत्यादि का एक और सेट जेनरेट करना चाहता हूं।
अंततः मेरे पास निम्न समाधान है, जो ठीक काम कर रहा है, लेकिन यह "eval" का उपयोग करता है।
(loop for name in '(ip date url code bytes referer user-agent) do
(let ((c-name (intern (concatenate 'string (symbol-name name) "-IS"))))
(eval `(defun ,c-name (c)
#'(lambda (l) (equal (,name l) c))))))
क्या कोई मेरी मदद कर सकता है, "बुराई eval" से छुटकारा पाने के लिए कैसे? मेरे कार्यक्रम के लिए यह आवश्यक है कि फ़ंक्शन नाम सूची के रूप में प्रदान किए जाएं। तो कुछ marcro
(define-predicate ip)
(define-predicate date)
(define-predicate url)
आदि के लिए एक कॉल
मेरी जरूरतों फिट नहीं होता। मुझे "eval" के साथ कोई वास्तविक समस्या नहीं है, लेकिन मैं अक्सर पढ़ता हूं, कि eval को खराब शैली माना जाता है और यदि संभव हो तो इससे बचा जाना चाहिए।
अग्रिम में धन्यवाद!
निश्चित रूप से मैक्रो के लिए सही मामला। सही विकल्प के रूप में 'eval' का उपयोग करना एक बहुत ही दुर्लभ मामला है। –
@ एलियास, आपने जो लिखा है उसके बारे में सिर्फ एक प्रश्न: ऐसा लगता है कि मैक्रोज़ को लोड समय पर मूल्यांकन नहीं किया जा सकता है क्योंकि उनका उपयोग कोड उत्पन्न करने के लिए संकलन समय पर किया जाता है। – tuscland