Ruby case语句未按预期执行

Dav*_*Nix 3 ruby ruby-on-rails

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
Run Code Online (Sandbox Code Playgroud)

我错过了什么?使用pry,self.class == User返回true.

Jim*_*lle 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
Run Code Online (Sandbox Code Playgroud)