如果第一个是“假”,进一步条件会发生什么?

时间:2015-12-11 11:09:35

标签: ruby

如果条件A(例如$(function () { $(select).change(function () { if(selectedOption.is(":disabled")){ $('#opacity').addClass('opacity'); } else if(selectedOption.is(":enabled")){ console.log("not"); // looking to removeClass('opacity'); } }); }); )为!@object.nil?,条件B在检查时会出现错误(例如false),我经常遇到这种情况。

我在控制台中测试了它,但无法获得一些完整的数据。

1)如果第一个条件是@object.some_method -> undefined method 'some_method' for nil:NilClass,第二个可能导致错误,使用and / &&是否安全?

2)false怎么样?

2 个答案:

答案 0 :(得分:2)

!@object.nil? && @object.some_method

@object && @object.some_method

以上两者都是Ruby中的有效模式。您将不会获得“未定义的nil方法”错误,因为如果&&左侧的表达式求值为nil(或false,则永远不会评估if右侧的表达式})。

您还可以使用postfix unless@object.some_method if @object

完成此项检查
@object.some_method unless @object.nil?

or

都是有效的选择。

关于||

使用or(Rubyists通常避免使用关键字||运算符)不会保护您免受错误的影响,因为当nil左侧的表达式求值为{{1 ,解释器实际上将继续并尝试评估右侧的表达式。

答案 1 :(得分:1)

这些行的第二部分永远不会被执行:

false && raise "this will never be raised"
true || raise "this will never be raised"

在您的情况下,如果您正在使用有效支持,则可以执行以下操作:

@object.try!(:some_method)