博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Ruby的require相关知识
阅读量:6206 次
发布时间:2019-06-21

本文共 1108 字,大约阅读时间需要 3 分钟。

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 api中内容。

 

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

你可能感兴趣的文章
Flymeos插桩适配教程
查看>>
还在用PS磨皮去皱?看看如何用神经网络高度还原你的年轻容貌!
查看>>
大端模式与小端模式、网络字节顺序与主机字节顺序
查看>>
微信支付申请90%的商户都卡在这儿了,申请微信支付,商户功能设置详细说明...
查看>>
高仿Instagram 页面效果android特效
查看>>
我的友情链接
查看>>
如何查找JSP页面中的错误
查看>>
2016 年总结
查看>>
将String转化成Stream,将Stream转换成String
查看>>
java路径Java开发中获得非Web项目的当前项目路径
查看>>
Google API设计指南-资源名称
查看>>
最全React技术栈技术资料汇总(收藏)
查看>>
【工具使用系列】关于 MATLAB 遗传算法与直接搜索工具箱,你需要知道的事
查看>>
Kali-linux Arpspoof工具
查看>>
PDF文档页面如何重新排版?
查看>>
基于http协议使用protobuf进行前后端交互
查看>>
UML设计一个电影票务销售系统(四)
查看>>
AlphaGo Zero用它来调参?【高斯过程】到底有何过人之处?
查看>>
Linux平台Oracle多个实例启动说明
查看>>
bash腳本編程之三 条件判断及算数运算
查看>>