我想知道是否存在虚假事物的捷径,例如事情是真的,例如。
current_user.logged_in == 'true'
等于
current_user.logged_in?
从内存中有not运算符'!'但我不知道它会如何工作。这些等同于一样吗?
current_user.logged_in? == 'false'
和
!current_user.logged_in?
我知道我可以使用current_user.nil吗?看看他们是否已经退出但我想知道其他方法,例如
current_user.mod_of_game? @guide
返回true是一个mod但是有以下快捷方式:
if (current_user.mod_of_game? @guide) == 'false'
仍在学习rails和cant的来龙去脉,真的找到一个错误的快捷方式的好答案。
由于
答案 0 :(得分:3)
红宝石'?'在方法名称的末尾,字符并不意味着什么特殊,它只是名称的有效最后一个字符。通常在返回布尔值的方法结束时使用它。因此,您知道.logged_in?
将返回true
或false
。
'!'字符是逻辑否定,所以true == !false
。在这种情况下,!user.logged_in?
字面意思是“NOT user.logged_in?
”,因此如果用户未登录,则整个语句将为true。 '!'的行为顺便说一句,大多数编程语言都是一样的。
作为旁注,current_user.logged_in?
并不好,因为如果没有人登录,您将获得例外:current_user
将是nil
,而nil
则不会有一个名为.logged_in?
的方法。正确的方法是在指出时使用current_user.nil?
和!current_user.nil?
。
if (current_user.mod_of_game? @guide) == false
的快捷方式为if !current_user.mod_of_game?(@guide)
。假设您的.mod_of_game?
方法有一个参数。
答案 1 :(得分:1)
首先,你原来的陈述可能并不是你想要的。
current_user.logged_in? == 'false'
在这里,logged_in?
可能会返回一个布尔值(我假设它因为设计效果很差),并且你将它与'false'
(一个字符串)进行比较。这意味着它将始终评估为false
。您可能意味着以下内容:
current_user.logged_in? == false
在这种情况下,以下陈述完全等同:
current_user.logged_in? == false
!current_user.logged_in?
!
运营商意味着'不是'所以它反转了前进表达式的值(它是一个布尔值)。
然后,您的最后一个表达式可以简化为:
if !(current_user.mod_of_game? @guide)
因为它接受方法调用mod_of_game?
的值并将其反转。