只是好奇为什么我不能从'local_variables'数组中删除声明的局部变量。
示例:
x=1
myarr = local_variables.clone
p local_variables
=> [:x, :_]
p myarr
=> [:x, :_]
p local_variables.class
=> Array
p myarr.class
=> Array
myarr.delete :x
p myarr
=> [:_]
local_variables.delete :x
p local_variables
=> [:x, :_]
WTF?
我确实怀疑使用参数调用local_variables.delete:x重新声明它,因为它被重新声明。但是,如果使用其他先前未声明的符号进行调用,则不会更改它:
p local_variables
=> [:x, :_]
local_variables.delete :whatever
p local_variables
=> [:x, :_]
有人可以解释一下吗?
THX。
答案 0 :(得分:5)
local_variables
返回一个包含所有当前声明的局部变量名称的数组。您可以使用该数组执行任何操作,但这显然不会影响声明哪些局部变量。为什么会这样?如果你从电话簿中删除一个名字,那个人会死吗?
答案 1 :(得分:4)
考虑以下方法:
def foo
[42, 23, 13]
end
foo #=> [42, 23, 13]
foo.delete 23
foo #=> [42, 23, 13]
这种行为会让你感到惊讶吗?
每次调用local_variables
(或foo
)时,都会创建一个新数组。如果您修改的新数组不会影响再次调用local_variables
会发生什么。
答案 2 :(得分:0)
AFAIK无法删除变量: