这个问题是在2011年之前提出的(Checking if a symbol is defined),但是自那时以来,Mathematica已经有几个主要版本。
因此,我想知道是否存在一种更简单的解决方案来检查是否已定义某个符号(以避免覆盖它)? ValueQ
显然有一些缺陷,而其他答案则为这种简单的问题提供了相当复杂的解决方案。
答案 0 :(得分:0)
在什么情况下,您担心“覆盖”。如果它是您定义的符号,则可以Protect
。
Remove[x];
x = 1;
Protect[x];
x = 2
(* Set::wrsym: Symbol x is Protected. *)
如果您担心阴影,请使用Contexts。
更新
symbols = Names["Global`*"];
NotebookEvaluate[FileNameJoin[{NotebookDirectory[], "test.nb"}], InsertResults -> False];
Complement[Names["Global`*"], symbols]
(* {"xyzzy"} *)