ruby $LOAD_PATH及类加载
$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用于加载配置文件。
ruby $LOAD_PATH及类加载的更多相关文章
- 【深入Java虚拟机】之四:类加载机制
类加载过程 类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载.验证.准备.解析.初始化.使用和卸载七个阶段.它们开始的顺序如下图所示: 其中类加载的过程包括了加载.验 ...
- JVM类加载
JVM的类加载机制就是:JVM把描述类的class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被JVM直接使用的Java类型 ClassLoader JVM中的ClassLoade ...
- java笔记--理解java类加载器以及ClassLoader类
类加载器概述: java类的加载是由虚拟机来完成的,虚拟机把描述类的Class文件加载到内存,并对数据进行校验,解析和初始化,最终形成能被java虚拟机直接使用的java类型,这就是虚拟机的类加载机制 ...
- Java类加载基本过程
基本过程: 根据类的全限定名称加载定义类的二进制字节流. 将字节流代表的静态存储结构转化为方法区的运行时数据结构 内存中生成一个代表这个类的java.lang.Class对象,作为方法去这个类的各 ...
- 从一道面试题来认识java类加载时机与过程
说明:本文的内容是看了<深入理解Java虚拟机:JVM高级特性与最佳实践>后为加印象和理解,便记录了重要的内容. 1 开门见山 以前曾经看到过一个java的面试题,当时觉得此题很简单,可 ...
- jvm--2.类加载机制
3.JVM类加载机制 (1)类加载机制 虚拟机把描述类的数据从Class文件,用ClassLoader ,加载到内存,并对数据进行校验.转换解析和初始化,最终形成虚拟机直接使用的java类型, 这就是 ...
- 《Java编程思想》学习笔记(二)——类加载及执行顺序
<Java编程思想>学习笔记(二)--类加载及执行顺序 (这是很久之前写的,保存在印象笔记上,今天写在博客上.) 今天看Java编程思想,看到这样一道代码 //: OrderOfIniti ...
- java类加载器及其委托机制
1.什么是类加载器,类加载器父子结构.BootStrap-->ExtClassLoader-->AppClassLoader,级别依次降低 2.类加载器之间的父子关系和管辖范围 3.类加载 ...
- java类加载器加载文件
例子:采用配置文件加反射的方式创建ArrayList和HashSet的实例对象. //第一种方式:类加载器加载文件 InputStream ips = ReflectTest2.class.getCl ...
随机推荐
- swftools 将pdf转换swf常见问题说明
swftools将PDF转成swfSWFTools提供了一系列将各种文件转成swf的工具: font2swf.exe gif2swf.exe jpeg2swf.exe pdf2swf.exe png2 ...
- YAML 格式学习
目录 什么是YAML 一.注释和多文件 二.格式要求 三.数据结构 1.对象 2. 数组 3.常量 四.字符串 YAML的特殊字符 什么是YAML YAML是"YAML不是一种标记语言&qu ...
- RAC共享磁盘挂载工具
待更新: oracleasm: udev: 自己搭建个存储服务器:
- 让ADO.NET Entity Framework 支持ACCESS数据库
如写的不好请见谅,本人水平有限. 个人简历及水平:. http://www.cnblogs.com/hackdragon/p/3662599.html 接到一个程序和网页交互的项目,用ADO.NET ...
- 【LOJ6042】「雅礼集训 2017 Day7」跳蚤王国的宰相(思博题)
点此看题面 大致题意: 给你一棵树,询问对于每个点需要改变多少条边来使得它成为树中到所有点距离和最小的点. 一些初始化及想法 这是一道思博题. 首先我们要知道一个结论:对于这棵树的重心,它的答案必定为 ...
- POJ 2976 Dropping tests 【01分数规划+二分】
题目链接:http://poj.org/problem?id=2976 Dropping tests Time Limit: 1000MS Memory Limit: 65536K Total S ...
- 【luogu P3469 [POI2008]BLO-Blockade】 题解
题目链接:https://www.luogu.org/problemnew/show/P3469 #include <cstdio> #include <cstring> #i ...
- T4Toolbox简单了解
使用T4模板,最令人喜欢的就是T4Toolbox了,他可以帮助我们生成多文件,并且直接包含在项目中. 环境:vs2017 T4代码高亮插件:Devart T4 Editor 插件地址:T4 Toolb ...
- linux系统状态查看/管理相关命令
系统状态查看命令: w 查看用户 top 系统进程监控 uptime 查看某台服务器运行了多久 htop 更加先进的交互式监控工具(需要安装) iotop 监控并实时显示磁盘IO输入和输出和程序进程( ...
- ATK-DataPortal 设计框架(二)
在信息的交换过程中,总是有此相同相似的功能,由于业务的各自不同,由同一类型来处理诸如增删改查等常见的信息处理方式.从日常的对些类行为操作为生成的类分析,大量雷同的代码遍布整个项目.框架中xxxHand ...