Jeśli ocenimy te linie: jeden po drugim, x
zostanie utworzony w kontekście cc
.Dlaczego to używanie funkcji Begin [] nie działa?
Begin["cc`"];
x = 1;
End[]
Jednakże, jeśli je oceniać razem,
(Begin["cc`"];
x = 1;
End[])
następnie x
zostanie utworzony w Global
. Dzieje się tak pomimo poniższych drukowania cc`
:
(Begin["cc`"];
Print[$Context];
End[])
Co jest przyczyną takiego zachowania? Zgaduję, że konteksty mają znaczenie tylko podczas fazy analizy, a nie oceny.
Przypadek użycia: Chciałem utworzyć paletę Button
, która zdefiniuje niektóre symbole, jeśli jeszcze nie istnieją, w "prywatnym" kontekście, aby uniknąć konfliktu z globalnymi. Jaka jest preferowana metoda wykonywania tego, inne niż umieszczanie wszystkich definicji w pliku pakietu i ładowanie ich z palety? (Chciałbym zachować niezależność palety).
Właśnie przeczytałem, że w Dokumentach, że „Interpretacja nazw symboli zależy od kontekstu' Begin' wpływa więc parsowanie wyrażeń wejściowych.” To odpowiada na moje pierwsze pytanie. Drugi wciąż stoi. – Szabolcs