删除以 "unconventional" 方式命名的变量
Delete variables named in an "unconventional" way
前段时间我正在审查一些遗留代码,我遇到了以下问题:开发人员创建了许多以点开头的变量(如 .variable1
),语法保留用于定义命名空间。
当被问及该约定的使用时,他回答说,这本质上是一种在函数范围内创建全局变量的方法——在 Python 中,您将实现以下操作:
def define():
global a
a = 2
define()
print(a)
在 q
中,翻译成这样:
f1:{.b1:2;}
f2:{b1:2;}
f1[] / this creates a variable .b1, which you can use globally
f2[] / this creates a variable b1 within the scope of the function, not usable outside
虽然我的偏好是使用命名空间创建全局变量(类似于 f1:{.my_namespace.b1:2;}
),但代码正在正常运行。
如果我想删除定义的以点开头的全局变量(.b1
在刚刚描述的情况下),问题就出现了,因为方法如
delete .b1 from `.
好像不行。我能找到的所有参考文献(如 this)都表明不能删除名称空间,这意味着这些未正确定义的变量将保留在那里。
明确地说,问题不在于如何从名称空间中删除变量,而是删除那些用作变量的名称空间——如果可能的话。
有什么想法吗?
根据您的问题,您希望从命名空间中删除变量。您可以通过 运行:
delete b1 from `.my_namespace
您粘贴的 link 中也有解释。
您不能做的实际上是删除对 my_namespace
.
的引用
作为旁注,您还可以使用 set
关键字在根命名空间中全局设置变量:
{`var set 2}[]
这将使您不必创建一次性名称空间。
前段时间我正在审查一些遗留代码,我遇到了以下问题:开发人员创建了许多以点开头的变量(如 .variable1
),语法保留用于定义命名空间。
当被问及该约定的使用时,他回答说,这本质上是一种在函数范围内创建全局变量的方法——在 Python 中,您将实现以下操作:
def define():
global a
a = 2
define()
print(a)
在 q
中,翻译成这样:
f1:{.b1:2;}
f2:{b1:2;}
f1[] / this creates a variable .b1, which you can use globally
f2[] / this creates a variable b1 within the scope of the function, not usable outside
虽然我的偏好是使用命名空间创建全局变量(类似于 f1:{.my_namespace.b1:2;}
),但代码正在正常运行。
如果我想删除定义的以点开头的全局变量(.b1
在刚刚描述的情况下),问题就出现了,因为方法如
delete .b1 from `.
好像不行。我能找到的所有参考文献(如 this)都表明不能删除名称空间,这意味着这些未正确定义的变量将保留在那里。
明确地说,问题不在于如何从名称空间中删除变量,而是删除那些用作变量的名称空间——如果可能的话。
有什么想法吗?
根据您的问题,您希望从命名空间中删除变量。您可以通过 运行:
delete b1 from `.my_namespace
您粘贴的 link 中也有解释。
您不能做的实际上是删除对 my_namespace
.
作为旁注,您还可以使用 set
关键字在根命名空间中全局设置变量:
{`var set 2}[]
这将使您不必创建一次性名称空间。