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#==
방식, 두 해시의 키-값 쌍 개수가 같고, 자체 #==
방식에 따라 키-값 쌍이 동일하면 두 해시가 동일합니다
설명:
: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
입니다. >