`![var_name]` 在 Ruby 中是什么意思?

what does `![var_name]` mean in Ruby?

我正在处理别人的代码库,我正在尝试破译以下行:

if !foo #<~ this line
  ...
end

我注意到 foo 应该是 return false,但是随着一声巨响!方法 returns true。这是否意味着此 ![var] 业务类似于说:

if foo != nil  

意思是"if not foo",实际上returns与foo相反。所以如果 foo = true, !foo returns false, 如果 foo = false, !foo returns true.

是的,上面的代码表示如果条件 (foo) 为假,则 运行 代码。我不会说它类似于 foo != nil,它更像是 !(foo),其中 foo 可以是 nilfalse.

你可以写

if !foo #<~ this line
  ...
end

作为

unless foo
  ...
end

但根据 Ruby 风格指南,您应该使用 unless,前提是代码可以在一行中表示。 do_something unless foo

在这种情况下!否定它后面的值。在 Ruby 中,只有 falsenil 被认为是假值,换句话说,在 if 等条件语句中将被视为 false 的值。所有其他值(true1"some-string" 等)都被认为是真实的(在条件中将被视为 true 的值)。

所以!false,是true!niltrue!truefalse

!foo

的语法糖
foo.!

即将消息 ! 发送到通过计算表达式 foo.

返回的对象

方法 !BasicObject 中定义,它是 documented just like any other method,即使相当简洁:

!objtrue or false

Boolean negate.