Почему такое использование Begin [] не работает?

Если мы оценим эти строки одну за другой , x будут созданы в контекст cc .

Begin["cc`"];
x = 1;
End[]

Однако, если мы оценим их вместе,

(Begin["cc`"];
x = 1;
End[])

тогда x будет создано в Global . И это несмотря на следующую печать cc` :

(Begin["cc`"];
Print[$Context];
End[])

В чем причина такого поведения? Я предполагаю, что контексты имеют значение только на этапе синтаксического анализа, а не оценки.

Пример использования: я хотел создать палитру Button , которая будет определять некоторые символы, если они еще не существуют, в «частном» контексте, чтобы избежать конфликта с глобальными объектами. Какой метод является предпочтительным для этого , кроме помещения всех определений в файл пакета и загрузки их из палитры? (Я бы хотел, чтобы палитра оставалась автономной.)

12
задан Brian Tompsett - 汤莱恩 14 June 2015 в 09:39
поделиться