local_variables的行为 - 任何人都可以解释一下吗?

时间:2010-11-11 19:13:13

标签: ruby

只是好奇为什么我不能从'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。

3 个答案:

答案 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无法删除变量:

http://programming.itags.org/ruby/64695/