4

可能重复:
是否有与 PHP 提取物等效的 Ruby?

有没有办法获取 Ruby 哈希,例如:

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

并将其转换为一组局部变量(显然没有手动进行分配)?结果应该就像我执行了这些语句一样:

a = 12
b = 24
c = 36

同样,我可以获取一组已定义的局部变量并制作一个哈希,其中键是变量名,值是变量值(同样,没有字面上写出哈希)?我以前从未见过这样的事情,所以我猜答案是否定的,但这会很好......

4

2 回答 2

2

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

def f x
  x.each do |k, v|
    instance_variable_set "@#{k}", v
  end
end

f :abc => 123, 'def' => 456

> @abc
=> 123 
> @def
=> 456 
于 2012-06-24T00:35:20.783 回答
0

你可以做很多这样的事情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]
于 2012-06-23T23:21:20.293 回答