我正在學習的Ruby/Rails,發現下面的代碼示例教程:
def role?(role)
return !!self.roles.find_by_name(role.to_s.camelize)
end
我沒有任何想法是什麼!!
做的,!!self
做。
我真的在Google上搜索,但沒有找到任何東西。
任何人都可以給出一個簡短的解釋嗎?提前致謝。
我正在學習的Ruby/Rails,發現下面的代碼示例教程:
def role?(role)
return !!self.roles.find_by_name(role.to_s.camelize)
end
我沒有任何想法是什麼!!
做的,!!self
做。
我真的在Google上搜索,但沒有找到任何東西。
任何人都可以給出一個簡短的解釋嗎?提前致謝。
這是重複兩次的「not」運算符(!
),所以它的參數將被強制爲其否定的布爾值,然後是其相應的布爾值。基本上,這是將任何對象強制爲其布爾值的一種方式。
!!false # => false
!!nil # => false
!!true # => true
!!{} # => true
!![] # => true
!!1 # => true
!!0 # => true (Surprised? Only 'false' and 'nil' are false in Ruby!)
這證實了該操作將始終返回boolena值
!!1 #gives you true
!!nil #gives you false
在紅寶石零,假的則認爲是假的,0,0.0和其他物體都認爲是真
這是通常用於將任意值強制轉換爲true
或false
之一。 這通常用於在任意數字,字符串或潛在的值之間轉換。
在你的例子中,這是非常低效的,因爲整個模型只能被加載而被丟棄。它會寫得更好:
def role?(role)
self.roles.count_by_name(role.to_s.camelize) > 0
end
該查詢將返回一個用於比較目的的單數值,其結果自動爲布爾值。
http://symbolhound.com/?q=%21%21+ruby –