=== vs. == 루비
Ruby에서 ==와 ===의 차이점은 무엇입니까? RDoc는 말한다
Case Equality—Object 클래스의 경우 # ==을 호출하는 것과 사실상 동일하지만 일반적으로 case 문에서 의미있는 의미를 제공하기 위해 하위 항목에 의해 재정의됩니다.
가 #==
은 동일 ==
? case 문에서 이것이 언제 / 어떻게 사용되는지에 대한 예를 제공 할 수 있습니까?
두 사람은 정말 서로 관련이 없습니다. 특히 #==
는 같음 연산자이며 같음과 #===
는 전혀 관련이 없습니다. 개인적으로, 나는 그것이 오히려 불행한 것을 발견 #===
유사한 너무 외모 #==
의 등호 사용하고 자주 호출 하는 경우 평등 연산자 , 삼중 등호 연산자 또는 threequals 연산자를 정말 평등과 아무 상관이없는 경우.
나는 case subsumption operator를 부릅니다 #===
. (내가 생각 해낼 수있는 최선의 방법이며, 특히 원어민의 제안에 개방적입니다.)
설명하는 가장 좋은 방법 a === b
은 "라벨이 붙은 서랍이 있다면 그 a
안에 넣는 것이 합리적 b
입니까?"입니다.
따라서, 예를 들어, Module#===
여부를 테스트합니다 b.is_a?(a)
. 만약 그렇다면 Integer === 2
, 2
라벨이 붙은 상자 에 넣는 것이 합리적 Integer
입니까? 네, 그렇습니다. 어때 Integer === 'hello'
? 당연히 아니.
또 다른 예는 Regexp#===
. 일치하는지 테스트합니다. 'hello'
라벨이 붙은 상자 에 넣는 것이 합리적 /el+/
입니까? 네, 그렇습니다.
범위와 같은 컬렉션의 Range#===
경우 멤버십 테스트로 정의됩니다. 해당 요소가 컬렉션에있는 경우 컬렉션으로 레이블이 지정된 상자에 요소를 넣는 것이 좋습니다.
그래서 #===
그것이 하는 일입니다 : 인수가 수신자 아래에 포함될 수 있는지 여부를 테스트합니다.
그게 case
표현 과 무슨 관련이 있습니까? 단순한:
case foo
when bar
baz
end
와 같다
if bar === foo
baz
end
예, #==
문서는 " ==
현재 개체 의 인스턴스 메서드"를 의미 합니다.
===
다음과 같은 case 문에서 사용됩니다.
case obj
when x
foo
when y
bar
end
와 같다
if x === obj
foo
elsif y === obj
bar
end
자신을 정의하는 일부 클래스 ===
는 Range (처럼 작동 include?
), Class (처럼 작동 obj.is_a?(klass)
) 및 Regexp
( =~
부울 반환을 제외하고 작동 )입니다. 자신을 정의하지 않는 일부 클래스 ===
는 숫자 클래스와 문자열입니다.
그래서
case x
when 0
puts "Lots"
when Numeric
puts(100.0 / x)
when /^\d+$/
puts(100.0 / x.to_f)
default
raise ArgumentError, "x is not a number or numeric string"
end
와 같다
if 0 == x
puts "Lots"
elsif x.is_a? Numeric
puts(100.0 / x)
elsif x =~ /^\d+$/
puts(100.0 / x.to_f)
else
raise ArgumentError, "x is not a number or numeric string"
end
재미있는 사실 ===
은 예외를 일치시키는데도 사용됩니다.rescue
다음은 예입니다.
class Example
def self.===(exception)
puts "Triple equals has been called."
true
end
end
raise rescue Example
# => prints "Triple equals has been called."
# => no exception raised
시스템 오류를 일치시키는 데 사용됩니다.
SystemCallError.===
둘이 동일한 errno를 가질 때 true를 리턴하도록 정의되었습니다. 과 같은 동일한 오류 번호를이 시스템 호출 오류로 Errno::EAGAIN
하고 Errno::EWOULDBLOCK
, 두 단지 그들 중 하나를 나열하여 구조 할 수 있습니다.
참고URL : https://stackoverflow.com/questions/3422223/vs-in-ruby
'development' 카테고리의 다른 글
유용한 (어려운) SQL 스크립트 라이브러리 (0) | 2020.11.07 |
---|---|
Hibernate를 사용한 Spring Security 3 데이터베이스 인증 (0) | 2020.11.07 |
jQuery : value.attr은 함수가 아닙니다. (0) | 2020.11.07 |
R에서 반복되는 값의 시퀀스 (0) | 2020.11.07 |
브라우저에서 angularjs의 $ rootScope 객체를 디버깅하는 방법 (0) | 2020.11.07 |