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一样么?
Kaedah
1,
Hash#==
, apabila dua cincang mempunyai bilangan pasangan nilai kunci yang sama, dan pasangan nilai kunci adalah sama mengikut kaedah#==
mereka sendiri, maka dua cincang itu adalah samaPenerangan:
:one=>1
ialah pasangan nilai kunci,:one
ialah simbol, iaitu kunci, dan1
ialah integer, iaitu nilai yang unik di peringkat global, iaitu , hanya ada satu:one
, secara semula jadi Mereka adalah sama antara satu sama lain,1
ialah integer, dan pertimbangan kesamaan juga sangat intuitif Dalam penilaianialah
2,#==
Walau bagaimanapun,1==1.0
adalah dilarang daripada mengatasi, dan objek perbandingan ialahtrue
, iaitu Hanya objek yang sama ialah#equal?
, seperti#object_id
ialahequal
.1.equal? 1.0
false
#equal?
Kaedahakan ditimpa oleh
Hash#merge
iaitu,h1.merge h2
ialah 54. Anda boleh membiarkanh1
, jika anda mahu Nilai 🎜> Atau, seperti berikuth2
new_hash["jim"]
3,h2 merge h1
terutamanya berkaitan dengan nilai cincang yang harus dikembalikan apabila mengindeks kunci yang tidak wujud, sepertih1
Di sini, dalam ,ialah
Hash.new
, iaitu memanggil objek,hash1['not_exist_key']
ialah|hash, key|
Maksud pernyataan ini ialah apabila kunci yang tidak wujud diindeks, tatasusunan kosonghash
dikembalikan. Cara yang lebih mudah untuk menulisnya ialahhash1
.key
jangkaan dan new_hash tidak sama kerana satu jim ialah 53 dan satu lagi jim ialah 54!