我遇到了奇怪的Array方法行为,我想知道是否有任何理由呢?对我来说,它看起来像Ruby中的一个错误:
Array(1)
[1]
Array('')
[""]
Array({})
[] # ???
Array(nil)
[] # ???
当我将nil
或{}
传递给Array时,我希望得到一个包含一个元素的数组,相反,我得到一个空数组。请注意,当我传递一个空字符串时,它正确(在我看来)返回一个包含一个元素的数组。谁能解释这种行为背后的逻辑?
我期待:
Array(nil) # => [nil]
Array({}) # => [{}]
与以下内容一致:
Array('') # => ['']
或者另一种合理的行为是:
Array('') # => []
这将是'一致'用:
Array(nil) # => []
Array({}) # => []
答案 0 :(得分:5)
对于哈希,行为是明确定义的:哈希被分解为键/值对,每对都在“子” - 阵列中。空哈希没有键/值对,所以它是一个空数组。没有其他意义;一个空物体的特殊外壳会打破最不可能的原则。
对于nil
你可以争论任何一种方式。由于nil
不是IMO,因此空数组是有意义的。
最终答案是因为那是.to_ary
和.to_a
的回归。对于nil
,我会发现一个空数组nil
- y比其中包含单个nil
的数组更多。对于哈希,我认为它必须与非空哈希转换为数组的方式一致。
答案 1 :(得分:2)
函数Array(x)尝试使用以下逻辑将x转换为数组:
因此,单个对象决定了它们如何转换为数组的逻辑。 Array('')
['']
而不是[]
的原因是字符串没有to_ary
或to_a
方法,因为ruby 1.9。我相信这个改变是因为没有规范的方法将字符串转换为数组。你想要按字符分割吗?等