zoukankan      html  css  js  c++  java
  • 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用于加载配置文件。



  • 相关阅读:
    3.Appium运行时出现:Original error: Android devices must be of API level 17 or higher. Please change your device to Selendroid or upgrade Android on your device
    3.Python连接数据库PyMySQL
    2.Python输入pip命令出现Unknown or unsupported command 'install'问题解决
    2.Linux下安装Jenkins
    5.JMeter测试mysql数据库
    Android 4学习(7):用户界面
    Android 4学习(6):概述
    Android 4学习(5):概述
    Android 4学习(4):概述
    Android 4学习(3):概述
  • 原文地址:https://www.cnblogs.com/wf0117/p/8849031.html
Copyright © 2011-2022 走看看