我是Ruby新手。我正在阅读关于Rubymonk的教程,我正在学习如何创建哈希。你能告诉我为什么我不能在没有key_value_pairs变量的情况下创建哈希。我的代码抗性大脑似乎合乎逻辑,代码应该没有它,但它没有。
这不起作用
def artax
a = [:punch, 0]
b = [:kick, 72]
c = [:stops_bullets_with_hands, false]
Hash[a,b,c]
end
p artax
这很有效。
def artax
a = [:punch, 0]
b = [:kick, 72]
c = [:stops_bullets_with_hands, false]
key_value_pairs = [a, b, c]
Hash[key_value_pairs]
end
p artax
答案 0 :(得分:6)
请查看Hash::[]
的文档,有三种方法可以调用它:
Hash[key1, value1, key2, value2, key3, value3]
Hash[[[key1, value1], [key2, value2], [key3, value3]]]
在第一种形式中,必须有偶数个参数,在第二种和第三种形式中,必须有一个参数。
在你的第一个例子中,你用三个参数调用它,它既不是偶数也不是1,因此它不属于上述三种形式中的任何一种。如果您不小心使用了四个数组(或两个),即偶数,如果它们属于第一种形式,但它不会按照您的预期完成:
def artax
a = [:punch, 0]
b = [:kick, 72]
Hash[a, b]
end
p artax
# { [:punch, 0] => [:kick, 72] }
在第二个示例中,您使用单个数组调用它,该数组属于第二种形式。
答案 1 :(得分:3)
要使第一个工作,你必须写
def artax
a = [:punch, 0]
b = [:kick, 72]
c = [:stops_bullets_with_hands, false]
Hash[ [a,b,c] ]
end
答案 2 :(得分:1)
你想做什么?
def artax
{punch: 0,
kick: 72,
stops_bullets_with_hands: false}
end
p artax