Ruby Hash.new vs Hash文字

时间:2012-02-21 13:42:57

标签: ruby api hash

我正在调用传递一些键/值对的第三方API(用PHP编写)。

此代码有效:

h = Hash.new
h['first_name'] = "Firstname"
h['last_name'] = "Lastname"
APICall([h]) # Record gets created

这不是:

h = {'first_name' => "Firstname", 'last_name' => "Lastname"}
APICall([h]) # Record does not get created

当我在两个实例中将Hash转储到控制台时,我得到相同的数据结构。那么为什么第一种方式有效但第二种方式没有呢?

编辑:不确定这是否重要,但我使用的是Ruby 1.8.7p72 / Linux。另外一个键/值对是Base64编码的图像字符串。

2 个答案:

答案 0 :(得分:1)

作为课程Hash的文档说明:

[](*args) public

创建使用给定对象填充的新哈希。 相当于文字{key => value,...}。在第一种形式中,键和值成对出现,因此必须有偶数个参数。第二种和第三种形式采用单个参数,该参数是键值对的数组或可转换为哈希的对象。

Hash["a", 100, "b", 200]             #=> {"a"=>100, "b"=>200}
Hash[ [ ["a", 100], ["b", 200] ] ]   #=> {"a"=>100, "b"=>200}
Hash["a" => 100, "b" => 200]         #=> {"a"=>100, "b"=>200}

http://apidock.com/ruby/Hash/%5B%5D/class

因此,至少Hash[]应该与{...}

具有相同的行为

答案 1 :(得分:-1)

哈希文字直到v1.9才出现。您正在使用v1.8。

http://www.ruby-lang.org/en/news/2009/01/30/ruby-1-9-1-released/

在此链接中搜索“文字哈希语法”:

http://svn.ruby-lang.org/repos/ruby/tags/v1_9_1_0/NEWS

这是一个将该功能后移到v1.8中的补丁:

http://bugs.ruby-lang.org/issues/1183