Понимание Tcl Полиморфизм - PullRequest
       8

Понимание Tcl Полиморфизм

2 голосов
/ 25 января 2010

В Tcl переменная и проц могут иметь одно и то же имя ...

например, я могу иметь

set container(alist) {}

proc container a {puts " do something"}

Гм ... какие еще формы полиморфизма существуют в tcl? ... Я смотрю какой-то код и вижу такие вещи.

Ответы [ 3 ]

7 голосов
/ 25 января 2010

Я не думаю, что это действительно полиморфизм.

Переменная, будь то простая переменная или массив, может иметь то же имя, что и proc, но tcl знает, какой из контекста. Посмотрите на команду info. info procs и info vars в частности.

Они живут в разных пространствах имен в интерпретаторе (кстати, не путайте с командой TCL namespace)

1 голос
/ 25 января 2010

Полиморфизм относится к одному объекту, который можно рассматривать как и использовать как объект другого типа. В вашем примере у вас есть переменная и proc с тем же именем, но они не обрабатываются и не могут рассматриваться как друг друга (переменная не может быть вызвана как proc, а proc не может рассматриваться как переменная).

Вы также можете утверждать, что в TCL невозможен полиморфизм. Поскольку TCL рассматривает все как строку (это язык без типов), «другого» типа данных не существует. Таким образом, вы не можете обрабатывать объект типа A, как если бы он был типа B, потому что не существует типа B.

Вы можете создать своего рода псевдополиморфизм для проков, определяя проки с одинаковыми именами в разных пространствах имен. Однако это не столько полиморфизм, сколько перегрузка операторов.

Вы можете прочитать эту статью о полиморфизме на Вики TCLers .

0 голосов
/ 26 марта 2010

Это не полиморфизм как таковой (имена просто ищутся по-разному), но три основные области именования: команды (например, процедуры), переменные и пространств имен . Также есть несколько других (например, каналов), но они, как правило, не имеют перекрывающихся имен.

Если у вас 8.6, другой основной класс «полиморфизма» - это имена методов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...