Ruby hash - 使用在哈希中创建的元素创建元素

时间:2014-03-05 15:29:13

标签: ruby hash

自我描述性的非工作代码:

mr_hash = {alpha: "hello", bravo: self.alpha + " world"} # Not working...

应该给出

{alpha: "hello", bravo: "hello world"}

是否有可能,如果是这样,如何在哈希中做到这一点?不使用像:

这样的中间变量
charlie = "hello"
delta = charlie + " world"
mr_hash = {alpha: charlie, bravo: delta}

3 个答案:

答案 0 :(得分:4)

可能不是您正在寻找的内容,但您可以使用Object#tap来避免创建其他变量:

mr_hash = Hash.new.tap do |h|
  h['alpha'] = 'Hello'
  h['bravo'] = h['alpha'] + ' world'
end
mr_hash # => {"alpha"=>"Hello", "bravo"=>"Hello world"} 

答案 1 :(得分:4)

我看到@maerics(+1)用tap打败了它。这只是一个轻微的变体(我最初包括merge,我根据@Daniël的评论删除了它:

mr_hash = {alpha: "hello"}.tap {|h| h[bravo] = h[:alpha] + " world"}

它仍然没有做@ClothSword所希望的,但正如@Agis指出的那样,失望是不可避免的。

答案 2 :(得分:3)

,这是不可能的,因为必须首先解释代码行,以便创建散列。