有没有Ruby等价于PHP的extract函数?

8

我可以创建一个块,将哈希元素提取并转换为本地变量,但我想知道是否已经存在原生方法。类似于这样的东西:

extract({ :foo => 'bar', :foo2 => 'bar2' })
puts foo  # 'bar'
puts foo2 # 'bar2'

请注意,这些密钥是私有的,作用域需要保持本地化。

是的,龙,没错。在这种情况下,龙比较少,因为所有的变量都是私有和本地的,并且处理相当讨厌的哈希变量名和大量成员。提取不是必需的,但很好。 - glortho
2个回答

8
您可以接近:
bar, bar2 = h.values_at :foo, :foo2

或者我们可以扩展Hash以提取实例变量:

class Hash
  def extract o
    each { |k, v| o.instance_variable_set '@' + k.to_s, v }
  end
end

h.extract self

p [@foo, @foo2]

我之前不知道这个 - 知道了就很好,谢谢 - 但如果有一堆键,这样做并不能节省太多,特别是因为如果你更改一个键名,你需要在此赋值中更改两次,在其他用到该键的地方再次更改。你可以将局部变量名泛化,但那并不是我所希望的。如果不可能的话...那就算了! - glortho
好的,我已经更新了完全自动化的方法,但它违反了你的局部作用域规则。 - DigitalRoss
很方便!我希望这个问题永远不会被完全回答,因为我正在学习各种技巧。 :-) - glortho
哇!Ruby 比 PHP 好太多了,而且更简洁。喜欢这种方法。使用并行赋值强制你只取出你所需的内容,而不像 PHP 那样把所有东西都吐出来,这很恶心。 - Darth Egregious

0

您可以使用each方法遍历每个key=>value对:

{ :foo => 'bar', :foo2 => 'bar2' }.each do |key, value|
  print key,"\t",value,"\n"
end

输出:

 foo     bar
 foo2    bar2

谢谢,Teddy。我知道我可以在块中完成它。只是在寻找一种简便的方法。 - glortho

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接