答案 0 :(得分:5)
!!
基本上是对布尔值的强制转换。如果current_product
truthy ,则!current_product
为false
,!!current_product
为true
,反之亦然。即它会将 truthy 值转换为true
,将 falsy 值转换为false
。
答案 1 :(得分:1)
它实际上是对布尔值的转换/转换。
类似的问题,但对于C ++:Doube Negation in C++ code
这里还有一篇相当不错的帖子:!! (The double bang / double not) in Ruby
答案 2 :(得分:1)
这是一种你会在任何语言中看到的模式,其中每个对象都有真值,但有规范布尔值(无论是True
还是False
,1
和0
,1
和""
,t
和nil
等等。 !!x
本质上是“强制转换为布尔值”,因为!!x
具有与x
相同的真值,但!!x
将始终是规范真/假之一值,而不是任何旧的真/假值。