Ruby 클래스 유형 및 사례 문
사이의 차이점은 무엇입니까?
case item.class
when MyClass
# do something here
when Array
# do something different here
when String
# do a third thing
end
그리고.
case item.class
when MyClass.class
# do something here
when Array.class
# do something different here
when String.class
# do a third thing
end
어떤 이유에서인지, 첫번째 것은 때때로 작동하지만 두번째 것은 작동하지 않습니다. 그리고 다른 것은, 두번째 것은 작동하고 첫번째 것은 작동하지 않습니다. 왜 그럴까요?어떤 것이 그것을 하는 "적절한" 방법입니까?
다음을 사용해야 합니다.
case item
when MyClass
...
저도 같은 문제가 있었습니다."case when"에서 Errno::ECONNRESET 클래스를 잡는 방법?
예, Nakilon이 맞습니다. 3qual === 연산자가 다음에 제시된 객체에서 어떻게 작동하는지 알아야 합니다.when
절인 루비
case item
when MyClass
...
when Array
...
when String
...
정말로
if MyClass === item
...
elsif Array === item
...
elsif String === item
...
이 경우가 3등 방법을 부르는 것임을 이해합니다.MyClass.===(item)
예를 들어), 그리고 그 방법은 당신이 원하는 모든 것을 하도록 정의될 수 있고, 그리고 당신은 정확하게 사례 진술을 사용할 수 있습니다.
사용할 수 있는 항목:
case item.class.to_s
when 'MyClass'
...다음 트위스트가 불가능한 경우:
case item
when MyClass
그 이유는case
사용하다===
연산자가 설명하는 관계는 교환적이지 않습니다.예를들면,5
이다.Integer
그러나 그것은Integer
a 5
당신은 이렇게 생각해야 합니다.case
/when
.
Ruby에서 클래스 이름은 형식의 객체를 참조하는 상수입니다.Class
특정 클래스를 설명합니다.그것은 그 말을 의미합니다.MyClass
루비에서 말하는 것과 같습니다.MyClass.class
자바로
obj.class
유형의 개체입니다.Class
클래스 설명obj
.한다면obj.class
이라MyClass
,그리고나서obj
다음을 사용하여 작성되었습니다.MyClass.new
(전화통화중입니다. MyClass
유형의 개체입니다.Class
다음을 사용하여 생성된 개체를 설명합니다.MyClass.new
.
MyClass.class
의 클래스입니다.MyClass
object(유형 객체의 클래스)Class
다음을 사용하여 생성된 개체를 설명합니다.MyClass.new
. 다른 말로 하면,MyClass.class == Class
.
그것은 당신의 성격에 달려있습니다.item
변수.예를 들어 객체의 인스턴스인 경우
t = 5
그리고나서
t.class == Fixnum
하지만 그것 자체가 수업이라면 예를 들어.
t = Array
그러면 그것은 될 것입니다.Class
목적어, 그래서
t.class == Class
편집: 내 대답이 틀릴 수 있으니 Nakilon이 언급한 "case when"에서 Errno::ECONNRESET 클래스를 잡는 방법을 참조하십시오.
언급URL : https://stackoverflow.com/questions/3908380/ruby-class-types-and-case-statements
'programing' 카테고리의 다른 글
APP_INITIALIZER에서 복구할 수 없는 예외를 처리하고 사용자에게 알리는 방법은 무엇입니까? (0) | 2023.06.14 |
---|---|
워드프레스에서 wp_generate_password 기능을 비활성화하려면 어떻게 해야 합니까? (0) | 2023.06.14 |
Vuex 스토어 상태가 업데이트되지 않음 화면 / Vue-Native (0) | 2023.06.14 |
간단한 (아마도 가장 간단한) C 컴파일러를 시작하는 것입니까? (0) | 2023.06.14 |
새 데이터를 Firebase 데이터베이스에 푸시할 때 사용자 지정 키 설정 (0) | 2023.06.14 |