重複の可能性:
What does !! ルビーで意味?
Ruby/Rails を学んでいて、次のコード例を含むチュートリアルを見つけました。
def role?(role)
return !!self.roles.find_by_name(role.to_s.camelize)
end
何をするのか、何をするのか!!
はわかり!!self
ません。
私は本当にそれについてグーグルで検索しましたが、何も見つかりません。
誰でも簡単に説明できますか?前もって感謝します。
重複の可能性:
What does !! ルビーで意味?
Ruby/Rails を学んでいて、次のコード例を含むチュートリアルを見つけました。
def role?(role)
return !!self.roles.find_by_name(role.to_s.camelize)
end
何をするのか、何をするのか!!
はわかり!!self
ません。
私は本当にそれについてグーグルで検索しましたが、何も見つかりません。
誰でも簡単に説明できますか?前もって感謝します。
これは「not」演算子 ( !
) が 2 回繰り返されるため、引数はその否定されたブール値に強制され、次に対応するブール値に強制されます。基本的に、これは任意のオブジェクトをそのブール値に強制する方法です。
!!false # => false
!!nil # => false
!!true # => true
!!{} # => true
!![] # => true
!!1 # => true
!!0 # => true (Surprised? Only 'false' and 'nil' are false in Ruby!)
これは通常、任意の値をまたはのtrue
いずれかに強制的にキャストするために使用されfalse
ます。これは、任意の数値、文字列、または潜在的なnil
値の間で変換する場合に便利です。
あなたの例では、モデル全体がロードされて破棄されるだけなので、これは非常に非効率的です。次のように書く方がよいでしょう。
def role?(role)
self.roles.count_by_name(role.to_s.camelize) > 0
end
そのクエリは、比較の目的で使用される特異値を返し、その結果は自動的にブール値になります。
これにより、操作が常にブール値を返すことが確認されます
!!1 #gives you true
!!nil #gives you false
ruby nilでは、falseはfalseと見なされ、0、0.0およびその他のオブジェクトはtrueと見なされます