def test
!!session[:test]
end!!-这是做什么的?我们能不能移除它,并仍然假设它的工作原理是一样的?
发布于 2010-09-29 20:13:48
那就是double bang (or bang bang)了。
它本身并不是一个真正的操作符。这实际上是两个!运算符,together...which执行双重否定。它用于确保您使用的是布尔值。
发布于 2010-09-29 20:49:24
第一个!将其操作数强制为布尔值,然后将其取反。第二个!对求反后的值求反。求和的效果是将操作数强制转换为布尔类型。所以如果你改变它,那么方法将不再返回布尔值,它将返回该符号的散列中的任何内容。如果删除它不会有任何变化,但是使用!!的好处是您不能滥用方法调用从会话中获取对象。
发布于 2010-09-30 01:22:56
为了解决您的第二个问题,如果删除双重否定,您的方法将发生细微的变化,因为您将返回对象,而不是TrueClass或FalseClass。
那!!通常是不受欢迎的,除非您显式地需要布尔值(例如,如果您正在构建API)。由于Ruby会将任何非nil和非false的值计算为the,因此通常只返回有问题的对象以便您可以调用其方法是安全的。
https://stackoverflow.com/questions/3821428
复制相似问题