3

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 == Usertrueを返します。

4

2 に答える 2

8

Rubyのcaseステートメントは、他のほとんどのステートメントよりもはるかに柔軟ですswitch===演算子ではなく、演算子を使用し==ます。クラスは、===の線に沿って演算子を定義します

def ===(other)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
于 2013-01-22T05:55:33.867 に答える
3

Rubycase===大文字小文字の等式演算子)を使用して等式をチェックします。

0.class == Fixnum結果はtrueになりますが、結果0.class === Fixnumはfalseになります。

于 2013-01-22T05:53:49.797 に答える