Ruby等动态语言潜在的不确定性

先来看一段代码

class Student
  SCHOOL = 'Dong Shan High School'
  attr_accessor :name
  attr_accessor :grade

  def initialize(name, grade)
    @name = name
    @grade = grade
  end

  def upgrade
    dadsfa
  end

  def growup
    @age += 1
  end

end

在定义class的时候,class中的代码会被立即执行,但方法内部的代码不会被执行,方法内部的代码只有的被调用时才会被执行。

也就是说如果程序启动了,如果里面的方法内部代码有问题,例如:标识符未定义,只要该方法没有被执行过,程序依然看起来正常工作,直到某一时刻,方法被执行了,标识符找不到,然后抛出异常。

在本例中,如果upgrade执行到的时候,程序会出错,报出dadsfa方法找不到。

在编译性语言中,这类问题是编译不过的。所以用Ruby更要注重异常处理、测试的编写,以及空指针错误。

当然,这只是一个小例子,类似的问题还有很多。

也有一些编辑器插件可以帮助我们避免此类低级问题,当它发现问题后会警告我们。