Если мы будем оценивать эти строки один за другим, x
будет создан в контексте cc
.
Begin["cc`"];
x = 1;
End[]
Однако, если мы их оценим вместе,
(Begin["cc`"];
x = 1;
End[])
то x
будет создано в Global
. Это несмотря на следующую печать cc`
:
(Begin["cc`"];
Print[$Context];
End[])
В чем причина такого поведения? Я предполагаю, что контексты имеют значение только во время фазы анализа, а не для оценки.
Случай использования. Я хотел создать палитру Button
, которая определит некоторые символы, если они еще не существуют, в контексте "private", чтобы избежать конфликта с глобальными. Какой предпочтительный способ сделать это, за исключением размещения всех определений в файле пакета и загрузки их из палитры? (Я хотел бы сохранить палитру автономной.)