【发布时间】:2023-03-05 14:30:01
【问题描述】:
我在看:
hash_1 = Hash[*[Array("a".."j"), Array(1..10)].transpose.flatten]
所以我想,带或不带 splat 的返回“*”看起来是一样的 - 那为什么
hash_1 = Hash[[Array("a".."j"), Array(1..10)].transpose.flatten] 返回{} ?
因此当我测试时
Array(1..10).equal? [*Array(1..10)] => 错误
这样
Hash[Array(1..10)] => {}
Hash[*Array(1..10)] => {1=>2, 3=>4, 5=>6, 7=>8, 9=>10}
请帮忙。
【问题讨论】:
-
Array(1..10) == [*Array(1..10)]是true所以不清楚为什么.equal?会返回相反的东西。 -
是的,是的!这个我也看不懂!
==返回true但.equal?返回false -
这可能是 Ruby 中的一个错误。
equal?应该是==的别名。请记住,.equal?几乎从未使用过。==是正常的方法。 -
@tadman 我相信你弄错了:ruby-doc.org/core-2.4.0/Object.html#method-i-eql-3F 说“与 == 不同,equal? 方法不应该被子类覆盖,因为它用于确定对象身份(即 a.相等?(b) 当且仅当 a 与 b) 是同一个对象”。通过在
[]内展开数组,创建了一个新的Array对象。两者匹配==,但不匹配equal?。 -
@pjs 啊,谢谢你的澄清。 Ruby 有
==、===、eql?和equal?,只是为了让你保持警觉。