Как проверить, является ли один класс основой другого в [incr Tcl]? - PullRequest
0 голосов
/ 08 января 2012

Дайте два имени класса, className1 и className2, как я могу проверить, имеет ли className1 className2 где-либо в своем наследии?

1 Ответ

4 голосов
/ 09 января 2012

Увы, [incr Tcl] поддерживает интроспекцию только для объектов, но не для классов; вам придется создать экземпляр className1, получить его наследие с помощью info heritage $theInstance и проверить, присутствует ли className2 в этом списке. Беспорядочный. (Начиная с версии 4.0, вы можете использовать info class subclasses className2 className1, чтобы проверить, является ли className1 прямой подкласс className2, но это не работает для косвенных подклассов, то есть с некоторыми подклассами между ними.)

Однако общие принципы ОО-программирования в Tcl, как правило, указывают на то, что вы должны использовать утиную типизацию, если можете: не беспокойтесь о том, принадлежит ли объект нужному классу, беспокойтесь о том, может ли он отвечать на сообщения, которые вы хотите отправить на него (т. е. методы, которые вы хотите вызвать). Поскольку любой объект может перехватывать попытки вызвать неизвестные вызовы метода, вы не можете реально выяснить, что он будет делать с помощью самоанализа, и вам просто нужно попробовать. Или поищите документацию, если вам повезет.

...