【问题标题】:Is there a Ruby equivalent to PHP's extract?是否有相当于 PHP 提取的 Ruby?
【发布时间】:2011-09-19 16:23:36
【问题描述】:

我可以创建一个块来提取哈希元素并将它们转换为局部变量,但我想知道本机方法是否已经存在。像这样的:

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

请注意,密钥是私有的,并且范围需要保持在本地。

【问题讨论】:

  • 是的,龙,真的。在这种情况下,更少的龙因为所有的私有和本地,并且处理相当讨厌的哈希变量名称 + 大量成员。提取不是必需的,但很好。

标签: php ruby hash extract


【解决方案1】:

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

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

输出:

 foo     bar
 foo2    bar2

【讨论】:

  • 谢谢,泰迪。我知道我可以在一个街区内完成。只是在寻找一种速记方法。
【解决方案2】:

你可以靠近:

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]

【讨论】:

  • 我不知道这个 - 很高兴知道,谢谢 - 但是有一堆钥匙是不值得的,特别是如果你改变一个键名,然后您在此分配中更改它两次,并在您使用它的任何地方再次更改。您可以通用化局部变量名称,但这并不是我所希望的。可能不可能,在这种情况下……就这样吧!
  • 好的,我已经使用完全自动化的方法对其进行了更新,但它违反了您的本地范围规则。
  • 好用!我希望这个问题永远不会得到完全回答,因为我正在学习各种技巧。 :-)
  • 哇! Ruby 比 PHP 更好、更干净。喜欢这种方法。使用并行赋值会迫使你只提取你需要的东西,而不是 PHP 把所有东西都扔掉,这很恶心。
猜你喜欢
  • 2011-11-03
  • 1970-01-01
  • 2012-06-07
  • 2012-10-05
  • 1970-01-01
  • 2015-03-24
  • 2011-01-13
  • 2014-02-19
相关资源
最近更新 更多