Ruby如何处理未声明的变量而不是php?

时间:2013-02-06 20:54:28

标签: php ruby-on-rails ruby

在php中,我可以轻松地写道:

if (x > 100) 
{ 
   method(); 
}

知道如果x不存在,我的程序会将其视为道路上的一个小凹凸并继续前进。

我习惯于php的超宽松变量输入和未声明的处理,并想知道Ruby的规则与此相关。

当您尝试评估未声明的内容时,Ruby的默认操作是什么?

如果我也可以加入它...在Ruby中,null,zero和false是否相同? 会

if(!x)
{
  puts 'works'
}

放?

我知道这些都是非常简单的问题,但要么它们对我来说太明显了,要么我使用错误的搜索短语。

2 个答案:

答案 0 :(得分:4)

  1. 如果您使用未经过十分转换的变量,Ruby会抱怨。

  2. 在红宝石中,您通常不会在if{中附上},而是if并以end结尾

  3. false nil0是不同的事情。您的代码会抱怨x未定义puts x falsenil

  4. 在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