可能重复:
是否有与 PHP 提取物等效的 Ruby?
有没有办法获取 Ruby 哈希,例如:
myhash = {a: 12, b:24, c:36}
并将其转换为一组局部变量(显然没有手动进行分配)?结果应该就像我执行了这些语句一样:
a = 12
b = 24
c = 36
同样,我可以获取一组已定义的局部变量并制作一个哈希,其中键是变量名,值是变量值(同样,没有字面上写出哈希)?我以前从未见过这样的事情,所以我猜答案是否定的,但这会很好......
可能重复:
是否有与 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]