hash1 = {:one=>1,:two=>2}
hash2 = {:two=>2,:one=>1}
hash1 == hash2
=> true
assert_equal hash1, hash2
=> true
hash1.object_id == hash2.object_id
=> false
这个情况下hash1和hash2明显不是同一个对象为什么可以assert_equal?
hash = { "jim" => 53, "amy" => 20, "dan" => 23 }
new_hash = hash.merge({ "jim" => 54, "jenny" => 26 })
expected = { "jim" => 53, "amy" => 20, "dan" => 23, "jenny" => 26 }
expected == new_hash
=> false
这个情况下为什么expected和new_hash又不等了?
还有一个,求大神解释一下:
hash = Hash.new {|hash, key| hash[key] = [] }
这句话是什么意思?这个语法是怎么回事?三个hash一样么?
1,
Hash#==
méthode, lorsque deux hachages ont le même nombre de paires clé-valeur et que les paires clé-valeur sont égales selon leur propre#==
méthode, alors les deux hachages sont égauxDescription :
:one=>1
est une paire clé-valeur,:one
est un symbole, qui est une clé, et1
est un entier, qui est une valeur. Les symboles en Ruby sont globalement uniques, c'est-à-dire. , il n'y en a qu'un:one
, naturellement Ils sont égaux les uns aux autres,1
est un entier, et le jugement d'égalité est également très intuitifdans Ruby, la méthode
#==
sera remplacée par les sous-classes pour fournir l'égalité sémantique, comme1==1.0
esttrue
Cependant, il est interdit de remplacer#equal?
et le l'objet de comparaison est#object_id
, c'est-à-dire que seul le même objet estequal
, tel que1.equal? 1.0
estfalse
. L'interrogateur doit dire#equal?
.2,
3,Hash#merge
méthode, telle queh1.merge h2
, pour la même clé,h1
sera écrasée parh2
Autrement dit,new_hash["jim"]
vaut 54. Vous pouvez laisserh2 merge h1
, si vous le souhaitez. voulez La valeur de 🎜> Ou, comme suith1
.traite principalement de la valeur que le hachage doit renvoyer lors de l'indexation d'une clé inexistante, comme
Hash.new
Ici, danshash1['not_exist_key']
,|hash, key|
esthash
, c'est-à-dire le. objet appelant,hash1
estkey
La signification de cette instruction est que lorsque la clé qui n'existe pas est indexée, un tableau vide'not_exist_key'
est renvoyé. Une façon plus simple de l'écrire est[]
.expected et new_hash ne sont pas égaux car un Jim a 53 ans et l'autre Jim a 54 !