मैं विभिन्न तत्वों के लिए HTML को उत्सर्जित करने के लिए कुछ विधियां लिख रहा हूं। प्रत्येक विधि में एक ही आउटपुट होता है, लेकिन आवश्यक रूप से एक ही इनपुट की आवश्यकता नहीं होती है।defgeneric में वैकल्पिक तर्क?
एक game-board
जरूरतों गूंज के साथ-साथ एक player
लेने के लिए (क्योंकि प्रत्येक खिलाड़ी केवल अपने स्वयं के टुकड़े को देखता है)
(defmethod echo ((board game-board) (p player)) ...)
एक बोर्ड अंतरिक्ष गूंज खिलाड़ी प्रति बदल रहा है (कि प्रेषण वास्तव में है की आवश्यकता नहीं है के लिए विधि game-board
विधि में किया गया, जो बाद में किसी स्थान पर echo
पर कॉल करता है)। आदर्श रूप में, मैं
(defmethod echo ((space board-space)) ...)
(defmethod echo ((space empty-space)) ...)
यह भी बोधगम्य है कि मैं बाद में एक वस्तु है कि आदेश में ही ठीक से प्रदर्शित करने में सिर्फ खिलाड़ी से अधिक जानने की आवश्यकता होगी में चलाने ऐसा करने में सक्षम होगा। चूंकि पहले से ही कर रहे हैं, हालांकि, एक ही सामान्य पर विशेषज्ञता के तरीकों, कि त्रुटि
The generic function #<STANDARD-GENERIC-FUNCTION ECHO (4)> takes 2 required arguments;
देना होगा यह आदर्श से कम वापस जाएँ और इन तरीकों echo-space
, echo-board
और इतने पर नाम के लिए लगता है।
क्या विशिष्ट वस्तु के आधार पर अन्य तर्कों का एक कैननिक तरीका है? मैं
(defgeneric echo (thing &key player ...) ...)
या
(defgeneric echo (thing &rest other-args) ...)
की तरह कुछ करना चाहिए? अधिक आम तौर पर, क्या कोई मुझे defgeneric
पर विशेष रूप से एक सभ्य ट्यूटोरियल पर इंगित कर सकता है? (मैंने प्रासंगिक पीसीएल अध्याय और some CLOS tutorials पढ़ा है, लेकिन वे उस स्थिति को कवर नहीं करते हैं जो मैं यहां पूछ रहा हूं)।
एक सामान्य पर फ़ंक्शन प्रेषण होने से संतोषजनक से कम लगता है (जो मुझे 'इको-बोर्ड'/'इको-स्पेस'/आदि क्षेत्र में वापस ले जाएगा)। मुझे लगता है कि आप इस मामले में सही हैं; मैं 'echo' (निष्क्रिय रूप से एकल आइटम को निष्क्रिय करने के लिए) और एक अलग' गूंज-अनुरूप 'या समान (जो अतिरिक्त पैरामीटर के आधार पर अपना आउटपुट बदल देगा) को परिभाषित करने से बेहतर हो सकता है। – Inaimathi
गैर-जेनेरिक फ़ंक्शन प्रेषण नहीं करता है, यह तर्कों को केवल अनुरूप बनाता है। यह स्पष्ट रूप से सभी संभावित तर्क लेने के लिए जेनेरिक (और इसलिए विधियों) की आवश्यकता है, यही कारण है कि यह केवल तब उपयोगी होता है जब इंटरफ़ेस वास्तव में समान होता है। – Ramarren
यहां केन की पुस्तक का एक पीडीएफ है (मुझे नहीं पता कि यह कितना कानूनी है, कृपया सलाह दें): https://doc.lagout.org/programmation/Lisp/Object-Oriented%20Programming%20in%20Common%20Lisp_% 20A% 20Programmer% 27s% 20Guide% 20to% 20CLOS% 20% 5BKeene% 201989-01-11% 5D.pdf –