2015-07-26 5 views
0

У меня установлен Tcl 8.6 в моей системе. Я просто пытаюсь несколько примеров из TIP #257: Object Orientation for Tcl:Ошибка при создании объектов с использованием TclOO

oo::object create foo 
::foo 
oo::define foo {method bar {} {puts "Hello, World!"}} 
foo does not refer to a class 
while evaluating {oo::define foo {method bar {} {puts "Hello, World!"}}} 

Я думал, что я могу просто создать объект без класса, или то, что я делаю неправильно?

+0

Пример, возможно, работал с ранними версиями реализации, но конфигурация экземпляров была перемещена в отдельную команду 'oo :: objdefine', чтобы сделать код немного менее сумасшедшим. –

ответ

2

Используйте objdefine вместо define для работы над объектами.

Обратите внимание, что класс является объектом, поэтому, когда вы работаете над классом себя, вы по-прежнему используете objdefine.

Некоторые примеры из вики (и один в документации для модуля Tcllib oo::util) были написаны, пока TclOO все еще формировался и не может исполняться в соответствии с текущим определением системы. Другая проблема заключается в том, что некоторые страницы wiki описывают умные обходные пути для ограничений TclOO, которые с тех пор были устранены и больше не нуждаются в обходных решениях, поэтому, если вы изучаете TclOO из вики, вы будете смущены. Если кто-то знает хороший, современный учебник, не стесняйтесь комментировать ссылки.

(.. Я только что вспомнил this книга главы я не изучал его в деталях, но это было ясно несколько вещей для меня)

Документация: oo::define (также objdefine), oo::util пакет

+0

Если есть примеры в документации TclOO (== TclOO части документации Tcl 8.6), которые не верны, сообщите мне, и я * * исправлю их как можно скорее. Страницы Wiki могут быть исправлены кем угодно. Другие ресурсы будут сильно различаться (и окончательные советы не будут затронуты). –

+0

@DonalFellows: пример, о котором я думал, оказался в документах 'oo :: util' (пример Singleton), а не в основных документах TclOO. OTOH, о том, что сбой в документации был сообщен 2½ года назад ... ([билет] (http://core.tcl.tk/tcllib/tktview?name=3609183fff)) Что касается вики, я отказываюсь трогать его в текущем положение дел. –

+0

@DonalFellows: на самом деле, есть * несколько неверных примеров в основных документах. Когда вы говорите «дайте мне знать», я посылаю их вам лично или я где-то пишу билеты? –