自我描述性的非工作代码:
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}
答案 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)
否,这是不可能的,因为必须首先解释代码行,以便创建散列。