为何⎕NL -9无法查询到父Namespace下的未命名子命名空间?
APL未命名子命名空间查询问题解答
为什么parent.⎕NL -9看不到未命名子命名空间?
⎕NL -9的作用是列出指定命名空间中已命名的子命名空间——也就是那些在父命名空间符号表中存在对应名称绑定的子命名空间:
- 创建
namedChild时,'namedChild' parent.⎕NS ''会在parent的符号表中添加一个名为namedChild的条目,指向新创建的子命名空间,因此能被⎕NL -9检测到。 - 创建
unnamedChild时,unnamedChild ← parent.⎕NS ''只是把新子命名空间的引用赋值给了当前工作区的unnamedChild变量,并没有在parent的符号表中注册任何名称,所以parent.⎕NL -9无法列出它。
未命名子命名空间实际存在于何处?
这个未命名子命名空间确实是parent的子命名空间(可通过unnamedChild.##查看父级,结果为parent),但它的唯一直接引用存在于当前工作区的unnamedChild变量中。只要该变量未被清除,子命名空间就会持续存在;若删除unnamedChild(比如执行)erase unnamedChild)且无其他引用指向它,APL的垃圾回收机制会回收这个未命名命名空间。
内容的提问来源于stack exchange,提问作者Josh D
相关产品推荐
相关产品推荐

