def test
!!session[:test]
end
!! - 这是做什么的?我们可以删除它并仍然认为它将工作相同吗?
答案 0 :(得分:9)
那将是double bang (or bang bang)。
它本身并不是一个真正的运营商。它实际上是两个!
运算符......它们执行双重否定。它用于确保您使用布尔值。
答案 1 :(得分:4)
第一个!
将其操作数强制转换为布尔值,然后将其否定。第二个!
否定了否定的价值。和效应是将操作数强制转换为布尔类型。因此,如果您更改它,那么该方法将不再返回布尔值,它将返回该符号的哈希中的任何内容。如果删除它就不会改变,但使用!!
的好处是你不能滥用方法调用来从会话中获取对象。
答案 2 :(得分:0)
要解决第二个问题,如果你删除双重否定,你的方法将会巧妙地改变,因为你将返回对象而不是TrueClass或FalseClass。
!!除非您明确需要布尔值(例如,如果您正在构建API),否则通常不赞成。由于Ruby将任何非零和非假值评估为真实,因此返回有问题的对象通常是安全的,这样您就可以调用它的方法。