Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 创建哈希的快捷方式_Ruby_Hash_Keyvaluepair - Fatal编程技术网

Ruby 创建哈希的快捷方式

Ruby 创建哈希的快捷方式,ruby,hash,keyvaluepair,Ruby,Hash,Keyvaluepair,我对Ruby是新手。我正在学习Rubymonk的教程,正在学习如何创建哈希。你能告诉我为什么没有key\u value\u pairs变量就不能创建散列吗。对我的代码抵抗大脑来说,代码在没有它的情况下可以工作似乎是合乎逻辑的,但事实并非如此 这不管用 def artax a = [:punch, 0] b = [:kick, 72] c = [:stops_bullets_with_hands, false] Hash[a,b,c] end p artax 这很有效 def

我对Ruby是新手。我正在学习Rubymonk的教程,正在学习如何创建哈希。你能告诉我为什么没有key\u value\u 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[key1,value1,key2,value2,key3,value3]
  • 使用单个数组,包含包含键和值的数组,如
    Hash[[key1,value1],[key2,value2],[key3,value3]]
  • 使用可转换为哈希的单个对象
在第一种形式中,必须有偶数个参数,在第二种和第三种形式中,必须只有一个参数

在你的第一个例子中,你用三个参数来调用它,它既不是偶数也不是1,因此,它不属于上述三种形式中的任何一种。如果您意外地使用了四个(或两个)数组,即偶数,则If将属于第一种形式,但它不会达到您预期的效果:

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