由BeginPackage引入的上下文中的变量污染重启内核后依然健在
mathematica吧
全部回复
仅看楼主
吧务
level 15
xzcyr 楼主
相当古怪的bug,开帖说一下。此bug的重现步骤如下。
1.
执行如下代码:
BeginPackage["abc`"];
EndPackage[];
abc`Det;
Det[{{1, 2}, {3, 4}}]
执行后会发现Det变红,且最后一行原样返回,这是意料之中的。
2.
执行
Exit
关闭内核。
3.
重启内核,执行
BeginPackage["abc`"];
EndPackage[];
注意,Det[{{1, 2}, {3, 4}}]和上面两行代码不要放在同一个单元内。执行完上述代码后,你会发现,Det立刻变红了,进一步执行
?? *`Det
我们会看到 abc`Det 已经冒出来了,尽管我们这一轮根本没创建过这个符号。
顺便说一句,我会撞上这个bug,是因为 VectorAnalysis` 程序包不知道从啥时候开始,为了保证高版本可用性,使用了一个肮脏的策略:它居然把程序包里的所有符号全塞到 System` 里了……
2025年09月28日 06点09分 1
吧务
level 15
xzcyr 楼主
忘了说了,测试版本14.3,Win11。具体啥时候引入的bug不清楚。
2025年09月28日 06点09分 2
吧务
level 15
xzcyr 楼主
Domen发现了问题的真相,参看SE帖子《Pollution in context added by BeginPackage remains even after Exit》(编号315537),简单地说,是带有叹号图标的新版警告信息(现在好像也不新了……)里面隐含了一个动态内容。把警告信息用Quiet压掉就没这事了。
这到底该算bug还是feature我说不好……
2025年09月30日 02点09分 4
1