차이점은 무엇입니까
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 클래스를 잡는 방법?
답변
네, 나 킬론은 맞습니다 when
. 절 에서 주어진 객체에서 threequal === 연산자가 어떻게 작동하는지 알아야합니다 . 루비에서
case item
when MyClass
...
when Array
...
when String
...
정말
if MyClass === item
...
elsif Array === item
...
elsif String === item
...
해당 사례가 3 개의 동일한 메소드 ( MyClass.===(item)
예 :)를 호출 하고 해당 메소드를 원하는대로 수행하도록 정의한 후 casew 를 precisionw와 함께 사용할 수 있습니다.
답변
당신이 사용할 수있는:
case item.class.to_s
when 'MyClass'
… 다음과 같은 왜곡이 불가능한 경우 :
case item
when MyClass
그 이유는, 즉 case
사용 ===
하고, 상기 관계 ===
연산자 설명은 교환 법칙이 성립하지 . 예를 들어, 5
이다 Integer
, 그러나이다 Integer
a는 5
? 이것이 당신이 case
/를 생각하는 방법 when
입니다.
답변
Ruby에서 클래스 이름은 Class
특정 클래스를 설명하는 유형의 객체를 나타내는 상수입니다 . 즉 MyClass
, Ruby에서 말하는 MyClass.class
것은 Java 에서 말하는 것과 같습니다 .
obj.class
Class
의 클래스를 설명하는 유형의 객체 입니다 obj
. obj.class
is MyClass
인 경우 (대략 말하기)를 obj
사용하여 작성되었습니다 MyClass.new
. MyClass
를 Class
사용하여 생성 된 객체를 설명하는 유형의 객체입니다 MyClass.new
.
MyClass.class
는 MyClass
객체 의 클래스입니다 (를 사용하여 생성 된 객체를 설명하는 유형의 객체 클래스 입니다 ). 즉, .Class
MyClass.new
MyClass.class == Class
답변
item
변수 의 특성에 따라 다릅니다 . 객체의 인스턴스 인 경우
t = 5
그때
t.class == Fixnum
그러나 그 자체가 클래스라면
t = Array
그러면 Class
객체 가됩니다.
t.class == Class
편집 : “case when”에서 Errno :: ECONNRESET 클래스를 잡는 방법을 참조하십시오 . 내 대답이 잘못 될 수 있기 때문에 Nakilon에 명시된 바와 같이.