先来看一段代码
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更要注重异常处理、测试的编写,以及空指针错误。
当然,这只是一个小例子,类似的问题还有很多。
也有一些编辑器插件可以帮助我们避免此类低级问题,当它发现问题后会警告我们。