Как обрабатывать возвращаемое значение из метода как тип класса - Itcl

Предположим, у меня есть следующий код, реализованный в Itcl.

package require Itcl

itcl::class A {
    constructor {} { puts $this }
    destructor {}
    public method Print {} { puts "ok" }
}

itcl::class B {
    constructor {} { }
    destructor {}
    public method returnA {} { return [A #auto] }
}

B b   ;# create an instance of class B
set obj [b returnA]   ; #assign return value to obj
$obj Print    ;# should treat obj as an A type and print ok

Теперь я получаю следующую ошибку:
недопустимое имя команды "0" при выполнении "$ obj Print"

Я понял, что мне нужно добавить области к моей переменной или к команде Print, чтобы вызвать метод Print, связанный с классом A. Но я действительно не знаю как.

Я также прочитал следующий пост:

Как получить ссылку на переменную члена класса Itcl?

Но там не говорится, как рассматривать возвращаемое значение как переменную определенного типа класса.

Ответьте на один вопрос: зачем вы тренируетесь на Itcl? Почему бы не использовать TclOO, встроенную объектно-ориентированную систему, поставляемую с Tcl 8.6. Кстати. более новые версии ITcl построены на основе TclOO, так что от этого мало что можно получить, особенно если вы начинаете работать с Tcl (и вы не привязаны к ITcl).

mrcalvin 10.08.2018 17:49

Кроме того, приведенный выше фрагмент не является MVE ... пожалуйста. уделите этому больше внимания.

mrcalvin 10.08.2018 17:52

mrcalvin, мне нужно предоставить tcl-C++ API, и я читал, что использование Itcl - лучшее решение. Вы рекомендуете вместо этого использовать TclOO? где я могу прочитать об этом?

ms_stud 10.08.2018 18:23

Каков ваш источник информации о Itcl и C++? Лучше всего обратиться к comp.lang.tcl, чтобы получить отзывы о выборе технологий для вашего приложения.

mrcalvin 15.08.2018 22:07
Сила классов Java: сравнение с языком C
Сила классов Java: сравнение с языком C
Абстракция" - это процесс упрощения сложных сущностей или концепций реального мира с целью их применения в форме программирования. В Java класс...
0
4
71
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы должны указать имя еще не созданного экземпляра класса A:

A [namespace current]::#auto

В противном случае имя созданного объекта возвращается неквалифицированным образом (0, a0, ...), что не может быть разрешено в команду Tcl для области действия вызывающего returnA.

См. Также groups.google.com/forum/#!topic/comp.lang.tcl/3zh3JOi3iWo

mrcalvin 10.08.2018 17:47

Другие вопросы по теме