$LOAD_PATH

$LOAD_PATH 指的是Ruby读取外部文件的一个环境变量,其实和windows的环境变量是一个概念。Ruby会在这个环境变量的路径中读取需要require的文件,如果在环境变量中找不到自己想要的文件,就会报LoadError错误。还有$LOAD_PATH和$:指的都是同一个环境变量

$LOAD_PATH 变量为一个数组,里面存放了路径字符串.

打印出来的有三个重要的目录分类:

  • site_ruby 默认优先级最高,安装本机相关库
  • vendor_ruby 操作系统供应商进行定制用的,一般为空
  • 2.3 ruby 标准库目录. 比如 date, csv 库

以下代码会将当前的目录加入 $LOAD_PATH:

#将当前目录放添加$LOAD_PATH最前面
$:.unshift __dir__ #在$LOAD_PATH最后追加当前目录
$: << __dir__

Ruby Kernel 中的类加载

Ruby 内核提供了 4 个类加载命令,分别是 load, autoload, require, require_relative, 分别对应了不同的使用场景,可谓做到了“小的可以打蚊子,大的可以打飞机”.

加载查找的顺序是基于 $LOAD_PATH 数组里面的路径的顺序来找的,找到了就不继续往下找

require(name) -> true or false or raise LoadError

  • name可以是绝对路径,也可以是相对路径。Ruby会自动为name补充扩展名(.rb, .so, .etc);
  • 函数执行时,如果name是绝对路径,则会去查找该文件;
  • 通常name是相对路径,Ruby会在$:中的目录中搜索该文件。所以通常需要$:.unshift添加搜索路径;
  • 找到该文件后,会运行该文件,并把该文件的绝对路径加入全局变量$"中,以此保证不重复加载;
  • 第一次加载返回true,已经加载返回false,找不到文件会抛出LoadError。

require_relative

  • require_relative与require类似,它只会在第一次调用时加载。
  • require_relative是直接取相对路径。此时与$LOAD_PATH($:)无关,是文件本身路径的相对地址

load(filename, wrap=false) -> true or raise

  • filename可以是绝对路径,也可以是相对路径。Ruby不会为filename添加扩展名;
  • 函数执行时,如果filename是绝对路径,则会去查找该文件
  • 通常filename是相对路径,Ruby会在$:中的目录中搜索该文件。所以通常需要$:.unshift添加搜索路径;
  • wrap为true时,被加载文件会在一个匿名模块中执行,避免污染;
  • load会加载文件并执行,成功会返回true,找不到文件会抛出LoadError。

autoload(module, filename) -> nil or raise LoadError

  • 将filename与module关联,当第一次使用module时,使用require加载该文件;
  • 执行过程与require一样;
  • 成功返回nil,找不到文件会抛出LoadError
  • 不常使用

主要区分:

●require加载文件时可以不加后缀名,load加载文件时必须加后缀名。

●require一般情况下用于加载库文件,而load用于加载配置文件。

最新文章

  1. javascript组件化
  2. 几种filter的比较
  3. 被忽视但很实用的那部分SQL
  4. tag标签调取
  5. sql server2000中使用convert来取得datetime数据类型样式(全)
  6. SQL Server 事务与锁
  7. [转贴]C++、C#写的WebService相互调用
  8. 独立博客怎样申请谷歌Adsense
  9. Retinex processing for automatic image enhancement 翻译
  10. 解决java压缩图片透明背景变黑色的问题
  11. 河内塔(hanoi)
  12. cocos2dx CCControlButton button大事
  13. global变量
  14. [转]http://www.russbishop.net/xcode-exception-breakpoints
  15. VMware Workstation 12 Pro 之安装林耐斯StartOS X64系统
  16. 在浏览器地址栏输入URL,按下回车后究竟发生了什么?
  17. 新概念英语(1-35)Our village
  18. OS&amp;SYS&amp;Shuti模块
  19. Codeforces Round #411 div 2 D. Minimum number of steps
  20. jQuery中清空元素.empty()和.html(&#39;&#39;),两种方法的对比

热门文章

  1. 什么是PDM?
  2. Linux文件寻址算法:逻辑地址到物理地址的转换
  3. python操作excel (openpyxl)
  4. 再学UML-深入浅出UML类图(三)
  5. 如何从ERP下载Sales BOM到CRM
  6. C语言 返回指针的函数
  7. Android(java)学习笔记38:Android 短信发送
  8. HDU 3625 第一类斯特林数
  9. [POI2008]STA-Station
  10. Graphics Card Notes | 烧卡日记(显卡常识笔记)