Maison > Questions et réponses > le corps du texte
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一样么?
伊谢尔伦2017-04-24 16:01:46
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 égaux
Description :
:one=>1
est une paire clé-valeur, :one
est un symbole, qui est une clé, et 1
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 intuitif
dans Ruby, la méthode #==
sera remplacée par les sous-classes pour fournir l'égalité sémantique, comme 1==1.0
est true
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 est equal
, tel que 1.equal? 1.0
est false
. L'interrogateur doit dire #equal?
.
2, Hash#merge
méthode, telle que h1.merge h2
, pour la même clé, h1
sera écrasée par h2
Autrement dit, new_hash["jim"]
vaut 54. Vous pouvez laisser h2 merge h1
, si vous le souhaitez. voulez La valeur de 🎜> Ou, comme suit h1
.
new_hash = hash.merge({"jim"=>54, "jenney"=>26}) {|key, oldval, newval| oldval}
new_hash == expected #=> true
3, traite principalement de la valeur que le hachage doit renvoyer lors de l'indexation d'une clé inexistante, comme Hash.new
Ici, dans hash1['not_exist_key']
, |hash, key|
est hash
, c'est-à-dire le. objet appelant, hash1
est key
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 []
.<🎜. >
怪我咯2017-04-24 16:01:46
expected et new_hash ne sont pas égaux car un Jim a 53 ans et l'autre Jim a 54 !