Я изучаю общие функции в CLOS.Нельзя использовать переменные в универсальных методах функции? (CLOS/LISP)
Из-за типа примеров, которые я нахожу в учебниках и онлайн, я очень смущен. В примерах всегда используется тот факт, что имеется многократная отправка. На основе типа аргумента выполняется другой расчет. Однако почему сами аргументы никогда не используются в примерах?
Пример кода из Wikipedia
; declare the common argument structure prototype
(defgeneric f (x y))
; define an implementation for (f integer t), where t matches all types
(defmethod f ((x integer) y) 1)
(f 1 2.0) => 1
; define an implementation for (f integer real)
(defmethod f ((x integer) (y real)) 2)
(f 1 2.0) => 2 ; dispatch changed at runtime
В примерах выше, вы можете увидеть методы сами никогда не используют x
или y
переменные. Это совпадение, что все эти примеры никогда не используют переменные? Можно ли их использовать?
Кроме того, это написано на Wikipedia:
методы определяются отдельно от классов, и они не имеют никакого специального доступа (например, «этот», «я», или «защищенный») для класса слотов.
Хорошо, поэтому методы не имеют «этого», потому что они не относятся к классу. Но почему методы обобщенной функции могут иметь приемник? Разве приемник не похож на «это» в классе?
Это сделало все ясно! Приемник - просто аргумент. Конечно! Благодаря! –