在php中,我可以轻松地写道:
if (x > 100)
{
method();
}
知道如果x不存在,我的程序会将其视为道路上的一个小凹凸并继续前进。
我习惯于php的超宽松变量输入和未声明的处理,并想知道Ruby的规则与此相关。
当您尝试评估未声明的内容时,Ruby的默认操作是什么?
如果我也可以加入它...在Ruby中,null,zero和false是否相同? 会
if(!x)
{
puts 'works'
}
放?
我知道这些都是非常简单的问题,但要么它们对我来说太明显了,要么我使用错误的搜索短语。
答案 0 :(得分:4)
如果您使用未经过十分转换的变量,Ruby会抱怨。
在红宝石中,您通常不会在if
和{
中附上}
,而是if
并以end
结尾
false
nil
和0
是不同的事情。您的代码会抱怨x
未定义puts
x
false
或nil
在ruby中检查某个值是否为nil
,您使用nil?
,if !x.nil?
答案 1 :(得分:1)
从上一个问题开始:在ruby中,零不被视为false,唯一的错误值是:nil
,显然是false
。其他一切都是“真实”的价值。
注意:我将使用实例变量,因为对于没有实例化的局部变量,这是不正常的。
为什么这不起作用
if @x > 100
method()
end
因为ruby中的>
实际上是一个方法调用,所以如果@x
为nil(未定义变量),它将引发NoMethodError
,因为nil没有定义该方法。
NoMethodError: undefined method `>' for nil:NilClass
所以你可以做的就是首先确保@x
有这样的值:
if @x && @x > 100
method()
end