как использовать процедуры в пакете с разными версиями в Tcl - PullRequest
1 голос
/ 03 июня 2010

У меня вопрос, я создал две версии, это пакеты 1.1 1.2 У меня те же процедуры в 1.1 и 1.2, но я изменил новую версию процедуры в 1.2.

Теперь мой вопрос, я хотел бы получить доступ к процедуре старой версии (1.1). Как я?

Ответы [ 2 ]

1 голос
/ 04 июня 2010

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

Однако, вы можете загрузить другую версию (используя опцию -exact для принудительной установки менее свежей версии) в суб-интерпретаторе. С большей вероятностью это будет работать с пакетами с чистым сценарием, чем с пакетами C (это зависит от того, насколько динамически загружается динамический загрузчик библиотеки ОС; некоторые - нет, некоторые нет)

interp create subinterp
subinterp eval {
    package require -exact mypackage 1.1
}
subinterp eval mySquare 3

Хотя это может или не может быть тем, что вы ищете; интерпретаторы очень сильно изолированы друг от друга, поэтому доступ к другим вещам, происходящим в главном интерпретаторе, потребует установки псевдонимов ...

0 голосов
/ 04 июня 2010

Используйте флаг -exact в выражении require пакета:

package require -exact mypackage 1.1

UPDATE: Я не рекомендую загружать разные версии одного и того же пакета одну за другой. Однако вы можете загрузить первую версию, заняться бизнесом, выгрузить ее, затем загрузить вторую версию и заняться бизнесом. В коде:

package require -exact mypackage 1.1
mySquare 2
package forget mypackage

package require -exact mypackage 1.2
mySquare 3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...