可能重复:
什么!在红宝石中是什么意思?
我正在学习 ruby/rails 并找到了一个包含以下代码示例的教程:
def role?(role)
return !!self.roles.find_by_name(role.to_s.camelize)
end
我不知道做什么!!
,也不知道做!!self
什么。
我真的用谷歌搜索过,但没有找到任何东西。
谁能给一个简短的解释?提前致谢。
可能重复:
什么!在红宝石中是什么意思?
我正在学习 ruby/rails 并找到了一个包含以下代码示例的教程:
def role?(role)
return !!self.roles.find_by_name(role.to_s.camelize)
end
我不知道做什么!!
,也不知道做!!self
什么。
我真的用谷歌搜索过,但没有找到任何东西。
谁能给一个简短的解释?提前致谢。
它是“非”运算符 ( !
) 重复了两次,因此它的参数将被强制为其取反的布尔值,然后是其对应的布尔值。基本上,这是一种将任何对象强制转换为布尔值的方法。
!!false # => false
!!nil # => false
!!true # => true
!!{} # => true
!![] # => true
!!1 # => true
!!0 # => true (Surprised? Only 'false' and 'nil' are false in Ruby!)
它通常用于将任意值强制转换为true
or之一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