1

重複の可能性:
What does !! ルビーで意味?

Ruby/Rails を学んでいて、次のコード例を含むチュートリアルを見つけました。

def role?(role)
    return !!self.roles.find_by_name(role.to_s.camelize)
end

何をするのか、何をするのか!!はわかり!!selfません。

私は本当にそれについてグーグルで検索しましたが、何も見つかりません。

誰でも簡単に説明できますか?前もって感謝します。

4

3 に答える 3

3

これは「not」演算子 ( !) が 2 回繰り返されるため、引数はその否定されたブール値に強制され、次に対応するブール値に強制されます。基本的に、これは任意のオブジェクトをそのブール値に強制する方法です。

!!false # => false
!!nil # => false
!!true # => true
!!{} # => true
!![] # => true
!!1 # => true
!!0 # => true (Surprised? Only 'false' and 'nil' are false in Ruby!)
于 2012-09-20T02:36:33.840 に答える
2

これは通常、任意の値をまたはのtrueいずれかに強制的にキャストするために使用されfalseます。これは、任意の数値、文字列、または潜在的なnil値の間で変換する場合に便利です。

あなたの例では、モデル全体がロードされて破棄されるだけなので、これは非常に非効率的です。次のように書く方がよいでしょう。

def role?(role)
  self.roles.count_by_name(role.to_s.camelize) > 0
end

そのクエリは、比較の目的で使用される特異値を返し、その結果は自動的にブール値になります。

于 2012-09-20T02:39:22.650 に答える
0

これにより、操作が常にブール値を返すことが確認されます

!!1 #gives you true
!!nil #gives you false 

ruby nilでは、falseはfalseと見なされ、0、0.0およびその他のオブジェクトはtrueと見なされます

于 2012-09-20T02:38:35.170 に答える