Ruby 中的$LOAD_PATH,Require,Load,Include和Extend介绍

Ruby 中的Require、Load、Include和Extend介绍

 

在介绍具体的方法之前,首先介绍一下ruby中的全局变量$LOAD_PATH,$LOAD_PATH是Ruby读取外部文件的一个环境变量,其实和windows的环境变量是一个概念。值为由路径组成的数组,Ruby会在这个环境变量的路径中读取需要require的文件,如果在环境变量中找不到自己想要的文件,就会报LoadError错误。另外$LOAD_PATH和$:指的都是同一个环境变量。

范例:

(1.)  对于一个empty project,$LOAD_PATH会包含如下内容:

 

(2.)  对于一个rails project,在任意一个controller中打印$LOAD_PATH的值,可以发现:

 

 

仔细查看上面的值,会发现rails在启动之后,其实把app/controllers,app/helpers,app/services等等这些应用本身的文件目录以及依赖的gem包中的lib目录都加到了全局变量$LOAD_PATH中,所以我们在应用中如果require一个文件,直接从$LOAD_PATH中的子目录开始写即可。比如,需要在controller中require  app/helpers/collection_helper.rb文件,那么直接写require 'collection_helper'即可。

 

1.Require方法介绍:require(name)

    Ruby试图载入一个名为name的库,如果成功了就返回true,否则返回false。Require可以使用绝对路径或相对路径,如果使用了相对路径,那么系统会在$:变量包含的目录中搜寻。如果给定的名字带有.rb,则作为源文件载入;如果扩展名为.so,.o,.dll等(根据不同平台),Ruby将这些作为扩展程序来载入;否则,Ruby会自动尝试在给定的文件名后面加.rb,.so,.dll等。已经载入的库会放到数组$"中,已经在$"里的则不会被重复装载。

 

   2. Load方法介绍:load(filename,wrap=false)

   wrap是可选参数,如果设为true,则这个文件将在匿名模块下运行,从而包括调用者的名字空间。任何aFileName里面的局部变量在装载它的环境下是不可用的。load和require方法的功能类似,区别主要在于:

(1).require加载一次,load可加载多次。

(2).require加载Ruby代码文件时可以不加后缀名,load加载代码文件时必须加后缀名。

(3).require一般情况下用于加载库文件,而load用于加载配置文件。

 

    3. Include方法介绍:

    include主要用来将一个模块插入(mix)到一个类或者其它模块。这个模块的方法在引入它的类或模块中以函数的形式调用。Ruby 不直接支持多重继承,但是 Ruby 的模块(Module)有另一个神奇的功能。它几乎消除了多重继承的需要。

注意:如果模块是定义在一个单独的文件中,那么在嵌入模块之前使用 require 语句引用该文件时必需的。

范例:(普通的ruby项目,非ROR项目)

 

 

    4. Extend方法的介绍:

extend用来在一个对象(object,或者说是instance)中引入一个模块,这个类从而也具备了这个模块的方法。include 和extend方法的区别主要在于:

(1.)在类定义中引入模块,使模块中的方法成为类的实例方法

这种情况是最常见的直接 include 即可

(2.)在类定义中引入模块,使模块中的方法成为类的类方法

这种情况也是比较常见的直接 extend 即可

 

范例1:


范例2:

 



 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值