Когато направя :symbol == :symbol
установявам, че е вярно. Те са същите.
Ако случаят е такъв, как можем да създадем масиви като този:
a = [{:name=>"Michael"},{:name=>"John"}]
Когато направя :symbol == :symbol
установявам, че е вярно. Те са същите.
Ако случаят е такъв, как можем да създадем масиви като този:
a = [{:name=>"Michael"},{:name=>"John"}]
Вижте кода по-долу:
a = [{:name=>"Michael"},{:name=>"John"}]
a.map(&:object_id) # => [70992070, 70992050]
Това е така, защото a
е масив от хеш, но те са 2 различни хеш обекта. В Ruby Hash
трябва да има uniq ключ. Но 2 различни хеша могат да имат едни и същи символи като ключове.
Изглежда сте объркан относно хеш ключовете. Един хеш не може да съдържа един и същ ключ два пъти, но два различни хеша могат да имат един и същ обект като ключ. Например:
a_key = "hello"
spanish = { a_key => "hola" }
french = { a_key => "bonjour" }
some_array = [spanish, french]
Освен това е възможно масивите да съдържат дублирани обекти (напр. [1, 2, 1]
е валиден) -- но те дори не са дубликати. Два хеша, които съдържат един и същи ключ, все още са различни обекти.
Няма нищо необичайно в масив като този. Всъщност е нормално хешовете в масив да имат общи ключове, защото обикновено, ако искате да поставите неща в масив, това означава, че те имат нещо общо, което можете да използвате, за да се справите с тях по същия начин.
a
са различни и освен това масивите могат да съдържат дублирани елементи. Може да си мислите за хеш, в който случай ключовете трябва да са уникални и наистина няма да намерите две срещания на:symbol
в набора от ключове. - person Jake Romer   schedule 30.03.2014people = {name: 'Joe', name: 'Jane', name: 'Sally'}
. За да изградите някаква интуиция защо това би било незаконно, помислете какво трябва да произвеждаpeople[:name]
. По същия начинa[0]
иa[1]
не представляват такава концептуална трудност. - person Jake Romer   schedule 30.03.2014