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의 클래스입니다.MyClassobject(유형 객체의 클래스)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 |