Поддерживает ли Common Lisp Object System (CLOS) типизацию утки? - PullRequest
4 голосов
/ 17 февраля 2012

Я читаю "Практический Common Lisp" и мне интересно, поддерживает ли Common Lisp Duck-Typing, например, Ruby?

В Ruby можно вызывать метод объекта независимо от класса, еслион реализует метод со списком имен и аргументов, который принимает вызывающая сторона.

А как насчет CLOS?Можно ли вызывать методы для объектов без учета их класса, просто предполагая, что универсальная функция справится с этим.Возможно, утка не нужна, потому что CLOS не следует философии передачи сообщений, а методы не привязаны к классам.

1 Ответ

14 голосов
/ 18 февраля 2012

Возможно, утка не нужна, потому что CLOS не следует философии передачи сообщений и методы не привязаны к классам.

Это именно тот случай.Каждая общая функция может быть динамически специализированной для определенного класса.Также может быть реализация по умолчанию.А поскольку Lisp использует динамическую типизацию, каждая функция может вызываться с аргументами любого типа, а для универсальных функций решение о диспетчеризации, основанное на типе аргумента, принимается во время выполнения.

...