Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.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 为什么Hash.try\u convert不将二维数组转换为哈希?_Ruby - Fatal编程技术网

Ruby 为什么Hash.try\u convert不将二维数组转换为哈希?

Ruby 为什么Hash.try\u convert不将二维数组转换为哈希?,ruby,Ruby,对散列说出以下内容。请尝试转换(obj): 尝试使用#to_散列方法将obj转换为散列。如果由于任何原因无法转换obj,则返回转换后的哈希或nil 但是,当我尝试以下方法时: [[:a,"a"],[:b,"b"]] 我明白了: Hash.try_convert([[:a,2],[:b, 3]]) => nil 但是如果我只是在数组上使用了γ-toh方法,我得到了我认为正确的行为: [[:a,"a"],[:b,"b"]].to_h => {:a=>"a", :b=>"b

对散列说出以下内容。请尝试转换(obj):

尝试使用#to_散列方法将obj转换为散列。如果由于任何原因无法转换obj,则返回转换后的哈希或nil

但是,当我尝试以下方法时:

[[:a,"a"],[:b,"b"]]
我明白了:

Hash.try_convert([[:a,2],[:b, 3]])
=> nil

但是如果我只是在数组上使用了γ-toh方法,我得到了我认为正确的行为:

[[:a,"a"],[:b,"b"]].to_h
=> {:a=>"a", :b=>"b"}

这是否意味着我对文档的理解是不正确的(即,上述两种方法不应被视为类似的),是发生了其他事情,还是我只是以一种我还没有考虑过的方式变傻了?

多亏了Arie Shaw在评论中提醒人们注意我变傻的确切方式

我随后发现了一个:

类Hash有一个try_convert方法,它被记录为“使用#to_Hash方法尝试将obj转换为Hash”。令人惊讶的是,数组类没有一个方法来_Hash,但它有一个方法来_h将其转换为Hash。这看起来有两种可能的方法具有不同的名称,但具有相同的预期行为,这打破了Hash#try_convert的一些用法

因此被拒绝:

Ruby通常有两种对象转换方法,例如#to_s和#to _str、#to _i和#to _int、#to _h和#to _hash。 前者用于显式转换,后者用于隐式转换(来自具有相同方法签名的对象,例如代理)


这为我提供了一个比较明显的答案-数组有一个#to#h方法,但没有一个#to#h散列方法。

散列。try\u convert
尝试调用给定对象上的
。to#h