创建哈希的快捷方式
Shortcut for creating Hashes
我是 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
要使第一个有效,您必须编写
def artax
a = [:punch, 0]
b = [:kick, 72]
c = [:stops_bullets_with_hands, false]
Hash[ [a,b,c] ]
end
请查看Hash::[]
的文档,有3种调用方式:
- 带有交替键和值的列表,例如
Hash[key1, value1, key2, value2, key3, value3]
- 使用单个数组,包含包含键和值的数组,例如
Hash[[[key1, value1], [key2, value2], [key3, value3]]]
- 使用可转换为散列的单个对象
在第一种形式中,必须有偶数个参数,在第二和第三种形式中,必须只有一个参数。
在你的第一个例子中,你用 三个 个参数调用它,它既不是偶数也不是 1,因此,它不属于上述三种形式中的任何一种。如果您不小心使用了 four 数组(或两个),即偶数,如果属于第一种形式,但它不会完成您期望的事情:
def artax
a = [:punch, 0]
b = [:kick, 72]
Hash[a, b]
end
p artax
# { [:punch, 0] => [:kick, 72] }
在你的第二个例子中,你用一个数组调用它,它属于第二种形式。
你想这样做吗?
def artax
{punch: 0,
kick: 72,
stops_bullets_with_hands: false}
end
p artax
我是 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
要使第一个有效,您必须编写
def artax
a = [:punch, 0]
b = [:kick, 72]
c = [:stops_bullets_with_hands, false]
Hash[ [a,b,c] ]
end
请查看Hash::[]
的文档,有3种调用方式:
- 带有交替键和值的列表,例如
Hash[key1, value1, key2, value2, key3, value3]
- 使用单个数组,包含包含键和值的数组,例如
Hash[[[key1, value1], [key2, value2], [key3, value3]]]
- 使用可转换为散列的单个对象
在第一种形式中,必须有偶数个参数,在第二和第三种形式中,必须只有一个参数。
在你的第一个例子中,你用 三个 个参数调用它,它既不是偶数也不是 1,因此,它不属于上述三种形式中的任何一种。如果您不小心使用了 four 数组(或两个),即偶数,如果属于第一种形式,但它不会完成您期望的事情:
def artax
a = [:punch, 0]
b = [:kick, 72]
Hash[a, b]
end
p artax
# { [:punch, 0] => [:kick, 72] }
在你的第二个例子中,你用一个数组调用它,它属于第二种形式。
你想这样做吗?
def artax
{punch: 0,
kick: 72,
stops_bullets_with_hands: false}
end
p artax