Ruby中的“!!”符号是什么意思?

def test !!session[:test] end 

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

这将是双重爆炸(或爆炸声) 。

它本身并不是一个真正的运营商。 真的是两个! 运营商在一起…执行双重否定。 它用于确保您使用布尔值。

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

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

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