我正在使用一些使用此语法的代码(restful authentication).
def logged_in? !!current_user() end
尝试谷歌搜索,但它似乎忽略"!!",将接受一个答案,可以告诉我如何找到有关搜索字符串的信息,如!! 在谷歌.
这是双重否定.第一个!
转换为false
if ,如果current_user
不是nil
或false
.之后,它将其转换为true
.所以结果总是一个布尔值而不是值current_user
.结果总是true
如果current_user
不是false
或nil
.不然吧false
.
它是否定运算符!
,两次.这给出了一个具有相同真值的值,但显然只是一个布尔值.
在Ruby中,有一些被认为是"真"(任何除了许多价值观false
和nil
),并且被认为是一对夫妇是"假"(包括false
和nil
).第一个否定将所有真值转换为false
,并将所有假值转换为true
.第二个否定然后反转,给你一个与原始值具有相同真值的值,但只允许实际值true
或false
.
如果您不希望人们logged_in?
用作访问当前用户的方式,而是希望它只返回一个布尔值,这会很有用.
它等同于更明确和更详细:
def logged_in? if current_user() true else false end end