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

Dav*_*ric 1 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, :_]
Run Code Online (Sandbox Code Playgroud)

WTF?

我确实怀疑使用参数调用local_variables.delete:x重新声明它,因为它被重新声明.但如果使用其他先前未声明的符号调用则不会更改它:

p local_variables
=> [:x, :_]
local_variables.delete :whatever
p local_variables
=> [:x, :_]
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下吗?

谢谢.

Jör*_*tag 5

local_variables返回一个包含所有当前声明的局部变量名称的数组.您可以使用该数组执行任何操作,但这显然不会影响声明哪些局部变量.为什么会这样?如果你从电话簿中删除一个名字,那个人会死吗?