1、模块
模块是独立在类和特定对象之外的实现。
模块的好处在于可以按照需要添加到特定的对象之中。
module FirstModule
def go
puts "car is running"
end
def self.show
puts "this is an white BMW"
end
end
class car
include FirstModule
end
++++++++++++++++
car=Car new
car.go
这样一来,一个类可以添加多个模块。以弥补不能多继承的缺点。
模块还有命名空间的角色,以区别同名的方法。甚至可以区别同名的类。
Module1.sayhello() Module2.sayhello()可以是不同的实现。
2、方法或全局变量的别名。
用关键字alias为已经定义的方法或全局变量添加别名。
def meth
puts "this is a method"
end
alias orig_meth meth
def meth
puts "this method is redefined"
end
p meth
p orig_meth
一旦定义了别名,别名就和meth绑定起来了。但是重新定义meth以后,orig_meth也还是保持原来不变。
3、undef_method ,undef这两个关键字可以释放一个方法的定义。即以后就不存在这个方法了。
4、判断一个方法或表达式是否已经定义完成为define?
5、begin模块先于任何文件的任何执行语句执行,而end模块后于任何执行语句执行。多个begin模块按照加载的顺序执行,而多个end模块则与此顺序相反。
at_exit模块与end类似,但是晚于end模块执行。
6、method_missing方法是一个系统调用