Ruby的require相关知识

1. 在调用require xxx之前,需要确定xxx这个gem已经安装过了(使用gem install xxx,安装位置可以使用gem env列出),或者xxx是Ruby内置的标准函数库(StdLib),总之在本地有xxx的代码或lib。

2. 调用require xxx后发生了什么?xxx不是绝对路径。

(1)如果在 $LOAD_PATH 数组中能找到xxx,就调用kernel的原有require方法来载入xxx,并在 $LOADED_FEATURES中加入xxx

(2)如果在 $LOAD_PATH 数组中不能找到xxx,就要在gem的安装位置中找xxx,并把xxx的位置加入到$LOAD_PATH ,然后调用kernel的原有require方法来载入xxx,并在 $LOADED_FEATURES中加入xxx

3. Ruby1.9后,require由Ruby内置的require交给rubygems,但是真正的载入库的功能还是由Ruby的require来执行,rubygems的require只是完成对函数库的寻找以及对$LOAD_PATH的维护功能。$LOAD_PATH的功能类似于Linux中$PATH的功能,是寻找可加载库的文件位置。

4.require的返回值有四种情况。0(false): 之前已经require过了;1(true):require成功;<0(LoadError):没找到gem;>1(exception):异常

5.如果require后面的参数不是绝对路径,将会到$LOAD_PATH 中去找加载的文件,如果参数有rb后缀,则加载源文件,如果是so文件,会作为扩展文件加载,如果没有后缀,Ruby会自己试着加rb和so后缀,直到找到文件。如果最终找不到,就返回LoadError。这就能解释为什么有的代码是require 绝对路径的rb文件,有的就是一个gem名。

6.require不会重复加载$LAODED_FEATURES(也就是缩写$")中已有的文件。$LAODED_FEATURES中全是加载的rb文件全路径名,所以``require 'a'; require './a'’’不会再第二次加载a.rb,而是直接使用$LAODED_FEATURES的内容

7. load方法的不同点是每次都重新加载,所以只要代码修改了,可以不重启服务的情况下重新加载新代码;autoload方法是懒加载,只在第一次用到文件中的内容时才加载。

这些内容参考了Ruby 語法放大鏡和Ruby api中内容。

 

转载于:https://www.cnblogs.com/highsky/p/5840865.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值