什么是“!!”象征意味着在Ruby?

时间:2010-09-29 12:09:27

标签: ruby

def test
!!session[:test]
end

!! - 这是做什么的?我们可以删除它并仍然认为它将工作相同吗?

3 个答案:

答案 0 :(得分:9)

那将是double bang (or bang bang)

它本身并不是一个真正的运营商。它实际上是两个!运算符......它们执行双重否定。它用于确保您使用布尔值。

答案 1 :(得分:4)

第一个!将其操作数强制转换为布尔值,然后将其否定。第二个!否定了否定的价值。和效应是将操作数强制转换为布尔类型。因此,如果您更改它,那么该方法将不再返回布尔值,它将返回该符号的哈希中的任何内容。如果删除它就不会改变,但使用!!的好处是你不能滥用方法调用来从会话中获取对象。

答案 2 :(得分:0)

要解决第二个问题,如果你删除双重否定,你的方法将会巧妙地改变,因为你将返回对象而不是TrueClass或FalseClass。

!!除非您明确需要布尔值(例如,如果您正在构建API),否则通常不赞成。由于Ruby将任何非零和非假值评估为真实,因此返回有问题的对象通常是安全的,这样您就可以调用它的方法。