평등은 두 가지가 같은 것을 의미합니다. Ruby에서는 객체와 값을 비교하여 동일한 객체인지 확인합니다.
질문은...
Ruby에서 두 가지를 어떻게 비교합니까?
좋아요 :
1 == 1 # true
이미 알고 계실 것입니다...
하지만 ==
구문이 아니라 메서드입니까?
영향이 큽니다.
자신의 클래스에서 이 메서드를 구현하여 클래스를 더욱 강력하게 만들 수 있습니다. 이 게시물에서 배우게 될 내용입니다!
두 개체를 동일하게 만드는 것은 무엇입니까?
다음과 같이 두 문자열을 비교할 수 있습니다.
"foo" == "foo"
단어 및 문자 동일하면 동일합니다.
표현식은 true
를 반환합니다. .
String
클래스는 ==
를 구현합니다. (등호 두 개) 문자열을 비교하는 방법을 알고 있는 메서드입니다.
하지만 String
==
를 구현하지 않았습니다. ?
그런 다음 Ruby는 Object
를 사용합니다. 의 ==
구현 , 기본적으로 개체 콘텐츠 대신 개체 ID를 테스트합니다.
예 :
Object.new == Object.new # false String.new == String.new # true
이유 Object
false
반환 두 개의 새 개체가 개체 ID가 다르기 때문입니다.
String
의 경우 , 내용을 기반으로 비교하고 두 개의 새 문자열이 동일한 내용(비어 있음)을 가지므로 true
를 반환합니다. .
평등 구현
이제 방금 배운 내용을 사용하여 자신의 클래스를 비교할 수 있어 더욱 강력하게 만들어 보겠습니다.
==
덕분에 방법...
클래스의 두 인스턴스가 동일하다는 것이 정확히 무엇을 의미하는지 정의할 수 있습니다.
예 :
class Product attr_reader :name, :price def initialize(name, price) @name, @price = name, price end def ==(other) self.name == other.name && self.price == other.price end end p1 = Product.new('book', 49) p2 = Product.new('book', 49) p1 == p2 # true
==
메소드는 두 개의 Product
에 대해 이름과 가격이 모두 같아야 한다고 말합니다. 동등한 것으로 간주되는 개체.
기억 :
이 방법을 구현하지 않거나 Comparable
내 Ruby 책에서 설명하는 모듈) 두 개체는 값 대신 개체 ID를 사용하여 비교됩니다.
또한 Struct를 사용하는 경우 이미 ==
를 구현하고 있음을 언급해야 합니다. 당신을 위해.
삼중 등호는 어떻습니까?
==
메서드는 ===
입니다. 방법도? 그리고 대답은 예입니다 🙂
그렇다면 둘의 차이점은 무엇입니까?
Javascript에는 ==
라는 분명한 차이가 있습니다. 개체 유형이 동일하지 않은 경우(1
대 '1'
). 그리고 ===
'엄격한' 평등을 위한 것입니다.
그러나 Ruby에는 그런 것이 없습니다. ===
무엇 수단은 그것을 구현하는 클래스에 따라 다릅니다.
대부분의 경우 ==
의 별칭일 뿐입니다. .
String
과 같이 및 Object
.
다음은 ===
를 제공하는 내장 클래스 표입니다. 특별한 의미:
클래스 | 의미 |
---|---|
범위 | obj가 범위의 요소이면 true를 반환하고 그렇지 않으면 false를 반환합니다. |
정규 표현식 | 문자열에 대해 정규 표현식을 찾습니다. |
모듈 | obj가 mod의 인스턴스이거나 mod의 자손 중 하나의 인스턴스인 경우 true를 반환합니다. |
프로세스 | Proc#call 과 같은 proc의 매개변수로 obj를 사용하여 블록을 호출합니다. . proc 개체가 when 의 대상이 되도록 하는 것입니다. case 문의 절. |
결론
이 게시물에서는 ==
를 구현하여 클래스를 더욱 강력하게 만드는 방법을 배웠습니다. 방법. ==
의 차이점도 배웠습니다. 및 ===
.
이 게시물을 공유하는 것을 잊지 마세요. 더 많은 분들이 보실 수 있도록 🙂