在Ruby中,foo = expression是合法的吗?

omn*_*nse 3 ruby warnings

注意:我不确定如何命名这个问题,所以如果有人有更好的想法,请编辑它.

我会直接回答这个问题,因为没有任何预先解释要求.

这段代码:

!foo = true
Run Code Online (Sandbox Code Playgroud)

生成此警告

warning: found = in conditional, should be ==
Run Code Online (Sandbox Code Playgroud)

我会理解,如果这是在一个if或一个unless声明之后发生的,但这不能远离他们(夸大).我意识到我可以使用:

foo = true
!foo
Run Code Online (Sandbox Code Playgroud)

我想,这个警告并不是什么大不了的事,但是Ruby假设我做错了什么,当我没有做错时,有点恼火.


问题:

  • 这是一个错误吗?
  • 警告可以禁用吗?

谢谢!

Dig*_*oss 10

合法的.不是错误.警告可以被抑制.

您可以使用以下命令禁用警告:

$VERBOSE = nil
Run Code Online (Sandbox Code Playgroud)

有趣的$VERBOSE是,设置某些false东西与设置不同的情况nil.

顺便说一句,其他答案,至少在最初,倾向于假设Ruby将表达式解析为

(!foo) = true
Run Code Online (Sandbox Code Playgroud)

......但事实并非如此.它被解析为:

!(foo = true)
Run Code Online (Sandbox Code Playgroud)

......所以它正在做OP所需要的.并且Ruby没有规范或批准的标准,因此如果它在MRI(参考实现)中工作,那么它是合法的.