程序 E7.3-1.rb中先写了Me模块,然后include Me模块,实现了Mix-in功能,但是,这样没能做到代码复用。
我将 Me模块写在文件 E7.4-1.rb中,将 Person类写在文件 E7.4-2.rb中,这时候 Student类如何使用 Me模块和 Person类呢?这里要用到require方法。
看程序 E7.4-3.rb :
- #E7.4-3.rb
- require "E7.4-1"
- require "E7.4-2"
- class Student < Person
- include Me
- end
- aStudent=Student.new
- aStudent.talk # => I'm talking.
- puts aStudent.sqrt(77,2) # => 8.77496438739435
使用 require方法让你的程序文件变得简洁有力。 require方法包含另一个文件,另一个文件名需要是一个字符串。
还有一个 load 方法与require 方法相对应,也用来包含另一个文件。
看程序 E7.4-4.rb :
- #E7.4-4.rb
- load "E7.4-1.rb"
- class Student
- end
- aStudent=Student.new
- aStudent.extend(Me)
- puts aStudent.sqrt(100.1, 12) # => 10.0049987506246
require包含文件,只加载一次,遇到同一文件时自动忽略;不同路径下的同名文件会多次加载。 load包含文件,加载多次,即使是相同路径下同一文件。
总结一下:
require,load用于包含文件;include,extend则用于包含模块。
require加载文件一次,load加载文件多次。
require加载文件时可以不加后缀名,load加载文件时必须加后缀名。
require一般情况下用于加载库文件,而load用于加载配置文件。
利用load 多次加载文件的特性,可以用来实现程序的无缝升级和系统的热部署。程序功能改变了,你只需要重新load 一次,其它代码与它再次交互的时候,这个程序实际上已经不是原来的程序了。
完整阅读,请看我写的 Ruby语言中文教程all in one