Jim*_*Jim 10 ruby ruby-on-rails
我正在使用一些使用此语法的代码(restful authentication).
def logged_in?
!!current_user()
end
Run Code Online (Sandbox Code Playgroud)
尝试谷歌搜索,但它似乎忽略"!!",将接受一个答案,可以告诉我如何找到有关搜索字符串的信息,如!! 在谷歌.
Tom*_*kas 30
这是双重否定.第一个!转换为falseif ,如果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
Run Code Online (Sandbox Code Playgroud)