Когда я делаю :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
— это массив хэшей, но это два разных хеш-объекта. В 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