Обновить (перезагрузить) пакет mathematica после изменений - PullRequest
12 голосов
/ 09 декабря 2011

Я пытаюсь найти ярлык для следующего цикла.При разработке пакета mathematica каждый вносит изменения в код файла .m, а затем хочет проверить изменения в другом блокноте.Это бесконечный цикл ...

Итак, у нас есть пакет package.m и ноутбук test_package.nb, где проводится тестирование.В настоящее время, когда я что-то изменяю в файле .m, мне нужно:

Quit[]
Needs["package`"]

в блокноте, чтобы изменения стали доступны, чтобы я мог их протестировать.Кажется, что без Quit[] это не сработает.

Есть ли более короткий способ повторения этого цикла разработки?В частности, избегайте отказа от курения?

Последствия

Если бы я мог, я бы принял ответы как Рубенко, так и Леонида, поскольку оба они полезны и решают мою проблему.Однако, поскольку можно выбрать только один ответ, я выбрал Рубенко из-за простоты и легкости - просто изменив Needs на Get, я преодолел свою проблему.Тем не менее, пакет Леонида, безусловно, более сложный и, вероятно, в конце дня дает лучшие результаты, но он должен быть установлен, загружен и т. Д.

Ответы [ 3 ]

8 голосов
/ 09 декабря 2011

В качестве альтернативы использованию простого Get, предложенного @ruebenko (что является хорошим советом), вы можете попробовать использовать написанный мной пакет под названием PackageManipulations`, который делает то, что вы хотите.Это доступно здесь .Есть блокнот с примерами, иллюстрирующими, как это работает, также на странице, на которую я ссылаюсь.Пакет может перезагрузить, очистить или удалить данный пакет (контекст).Функция PackageReload специально сделает то, что вы хотите.

Он использует Get или Needs под капотом, но кроме того, он будет отслеживать так называемые "экранирующие символы" (символы, которые публично экспортируются, но не имеют сообщений об использовании и могут быть "«утечка информации о реализации» и, возможно, может решить проблемы с теневым копированием в пользу перезагружаемого пакета.Обратите внимание, что PackageReload автоматически вызовет Unprotect и ClearAll для символов пакета, поэтому решает проблему, упомянутую @ruebenko.Вы можете найти более подробную информацию в примере тетради, который поставляется с пакетом.

Обратите внимание, что, хотя я сам использовал его много раз, я не утверждаю, что он не содержит ошибок:)

8 голосов
/ 09 декабря 2011

Использовать Get; Нужно только грузить пакет, если он вообще не загружен. Иногда вам нужно быть осторожным и использовать ClearAll для переменных в пакете.

1 голос
/ 09 декабря 2011

Самый простой способ - использовать Clear или, что еще лучше, ClearAll на открытых символах в вашем пакете в самом начале пакета, как показано ниже

BeginPackage["SomePackage`"];
ClearAll[ ASymbol, AnotherSymbol, ...];

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

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