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#==
방식, 두 해시의 키-값 쌍 개수가 같고, 자체#==
방식에 따라 키-값 쌍이 동일하면 두 해시가 동일합니다설명:
:one=>1
은 키-값 쌍이고,:one
는 키인 기호이고,1
은 값인 정수입니다. 즉, Ruby의 기호는 전역적으로 고유합니다. ,:one
은 하나만 있는데, 당연히 서로 같고,1
은 정수이고, 평등 판단도평가에서
#==
메서드는 의미론적 동일성을 제공하기 위해 하위 클래스에 의해 재정의됩니다. 예를 들어1==1.0
는true
이지만#equal?
은 재정의가 금지됩니다. 비교 대상은#object_id
, 즉 동일한 대상만equal
입니다. 예를 들어1.equal? 1.0
은false
입니다. 질문자는#equal?
이라고 말해야 합니다.2,
은Hash#merge
메소드(예:h1.merge h2
)는 동일한 키에 대해h1
을h2
로 덮어씁니다. 즉,new_hash["jim"]
은 54입니다. 또는h2 merge h1
의 값을 원합니다. 으아아아h1
3,과 같이 존재하지 않는 키를 인덱싱할 때 해시가 어떤 값을 반환해야 하는지를 주로 다룹니다. 여기서
Hash.new
에서hash1['not_exist_key']
는|hash, key|
입니다. 호출 객체는hash
입니다. 이 문의 의미는 존재하지 않는 키가 인덱싱되면 빈 배열hash1
이 반환된다는 것입니다. 이를 작성하는 더 간단한 방법은key
입니다. >한 jim은 53이고 다른 jim은 54이므로 예상 및 new_hash는 동일하지 않습니다!