Ruby 中什么样的 Hash 会相等?
为情所困
为情所困 2017-04-24 15:59:46
0
2
663
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一样么?

为情所困
为情所困

répondre à tous(2)
伊谢尔伦

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 l'évaluation de
  • 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 [].

刘奇

expected et new_hash ne sont pas égaux car un Jim a 53 ans et l'autre Jim a 54 !

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal