在 Ruby 中交换哈希键和局部变量名称



可能的重复项:
有没有相当于PHP提取物的Ruby?

有没有办法采用Ruby哈希,例如:

myhash = {a: 12, b:24, c:36}

并将其转换为一组局部变量(显然不需要手动执行赋值)? 结果应该就像我执行了这些语句一样:

a = 12
b = 24
c = 36
同样,

我可以采用一组定义的局部变量并创建一个哈希,其中键是变量名称,值是变量值(同样,没有从字面上写出哈希)? 我以前从未见过这样的东西,所以我猜答案是否定的,但会很好......

您可能已经知道这一点,但为了记录:如果您愿意创建实例变量而不是局部变量,那么此函数将起作用:

def f x
  x.each do |k, v|
    instance_variable_set "@#{k}", v
  end
end
f :abc => 123, 'def' => 456
> @abc
=> 123 
> @def
=> 456 
你可以

Kernel.eval做很多这样的事情:

a = 1; b = 2; c = 3
local_variables.grep(/^[a-z]w*/)
=> ["a", "b", "c"]
# Map local variables to hash
@h = Hash[local_variables.grep(/^[a-z]w*/).map { |var| [var, eval(var)] }]     
=> {"a"=>1, "b"=>2, "c"=>3}
# Map hash to local variables
@b = binding
@h.each { |k,v| eval("#{k}_new = #{v + 100}", @b) }
local_variables.grep(/^[a-z]w*/)
=> ["a", "b", "c", "a_new", "b_new", "c_new"]
[a_new, b_new, c_new]
=> [101, 102, 103]

最新更新