Fyi,使用Rails。
给定user = User.find(1)
此case语句在返回nil
的结果时返回self.do_something_with_user
。
def case_method
case self.class
when User
self.do_something_with_user # assume does not return nil
when SomeOtherClass
self.do_something_else
else
nil
end
end
user.case_method # => nil
我错过了什么?使用pry,self.class == User
返回true。
答案 0 :(得分:7)
Ruby的case
语句比大多数其他switch
语句更灵活。它使用===
运算符,而不是==
运算符。类根据
===
运算符
def ===(其他) other.is_a?自我#self是班级 端
所以,你真正想要的是:
def case_method
case self
when User
do_something_with_user
when SomeOtherClass
do_something_else
end # else is un-needed as it will return nil by default
end
答案 1 :(得分:3)
Ruby的case
使用===
(case equality operator)来检查相等性。
虽然0.class == Fixnum
结果为true,但0.class === Fixnum
会导致错误。