`

Ruby中require、load、autoload的区别

阅读更多
require:
require(filename) -> true or false
Ruby tries to load the library named string, returning true if successful. If the filename does not resolve to an absolute path, it will be searched for in the directories listed in $:. If the file has the extension ``.rb’’, it is loaded as a source file; if the extension is ``.so’’, ``.o’’, or ``.dll’’, or whatever the default shared library extension is on the current platform, Ruby loads the shared library as a Ruby extension. Otherwise, Ruby tries adding ``.rb’’, ``.so’’, and so on to the name. The name of the loaded feature is added to the array in $". A feature will not be loaded if its name already appears in $". The file name is converted to an absolute path, so ``require 'a'; require './a'’’ will not load a.rb twice.

个人翻译:

   Ruby 会尝试去根据require(filename)中的filename去加载库,如果加载成功即返回tru。如果filename不能解析成一个绝对路径,它会直接在$:.中查找。如果加载文件有“.rb”的扩展名,将会被加载成资源文件,如果是“.so”, ".o"或者是“.dll”,或者在当前平台下任何的可共享的库扩展名,Ruby都会将其当成Ruby的扩展资源进行加载。否则,Ruby会尝试将“.rb”,".so"等等拼接在filename。加载过后的文件特性将会被添加进$的数组中。如果在$数组中,某个特性的名字已经存在,将不会重复被加载。文件名也会被转换为绝对路径,所以``require 'a'; require './a'’’不会再第二次加载a.rb。

 

个人理解: require也就是只会加载一次,第一次加载成功则返回true,重复加载则会返回faluse。

 

load: 

load(filename, wrap=false) → true 写道
Loads and executes the Ruby program in the file filename. If the filename does not resolve to an absolute path, the file is searched for in the library directories listed in $:. If the optional wrap parameter is true, the loaded script will be executed under an anonymous module, protecting the calling program’s global namespace. In no circumstance will any local variables in the loaded file be propagated to the loading environment.

 个人翻译:加载并执行在文件里的Ruby程序。如果filename不能解析成一个绝对路径,它会直接在$:.中查找。 wrap是可选参数,默认为false,如果设为true,则这个文件将在匿名模块下运行,从而包括调用者的名字空间。任何filename里面的局部变量在装载它的环境下是不可用的。

 

个人理解:加载并执行,而且 load是每次都会重新加载。只要你的代码有修改,不用通过重启服务器也可以直接重新加载你修改过的内容。

 

autoload: 

autoload(module, filename) → nil 写道
Registers filename to be loaded (using Kernel::require) the first time that module (which may be a String or a symbol) is accessed.

 个人翻译: 在第一次访问module(可能是字符串或者是符号)时,filename将会被加载。即理解为:第一使用时才会加载该文件,可以理解为懒加载。

 

分享到:
评论

相关推荐

    动态加载的艺术:Ruby中require与load的区别

    ### 动态加载的艺术:深入理解 Ruby 中 `require` 与 `load` 的区别 #### 引言 在 Ruby 编程中,模块化和代码重用是非常重要的实践。为了实现这一目标,Ruby 提供了两种不同的方法来加载外部文件和库:`require` ...

    Ruby中require、load、include、extend的区别介绍

    require,load用于文件,如.rb等等结尾的文件。include,load则用于包含一个文件中的模块。 require 一般情况下用于加载库文件,而load则用于加载配置文件。 1、require:加载一个库,并且只加载一次,如果多次加载会...

    举例讲解Ruby中require的使用方法

    ### Ruby中的Require详解 在Ruby语言中,`require`是一个非常重要的关键字,它主要用于加载其他Ruby文件或库。本文将详细介绍`require`的各种使用方法及其背后的原理,帮助开发者更好地理解和运用这一特性。 #### ...

    Ruby,详细描述require背后的故事

    ### Ruby中的Require详解 #### Ruby简介与特性 Ruby是一种高级编程语言,自1995年由Yukihiro "Matz" Matsumoto创立以来,因其简洁的语法和强大的功能受到广泛欢迎。它融合了多种语言的优点,如Perl、Smalltalk、...

    Laravel访问出错提示:`Warning: require(/vendor/autoload.php): failed to open stream: No such file or di解决方法

    本文实例讲述了Laravel框架访问...`Warning: require(/http/www.mywakavLee.cn/bootstrap/../vendor/autoload.php): failed to open stream: No such file or directory in /http/www.mywakavLee.cn/bootstrap/autolo

    autoload与namespace实例

    在PHP编程中,`autoload`和`namespace`是两个非常重要的概念,它们极大地提升了代码的组织性和可维护性。本文将深入探讨这两个概念,并通过实例来帮助你更好地理解和应用它们。 首先,我们来理解`autoload`。在PHP...

    Ruby-qtbindings允许你在Ruby中使用QTGui工具包

    在Ruby中使用QTGui工具包,开发者可以利用Ruby的简洁语法和动态特性,同时享受到QT提供的强大GUI设计能力。通过qtbindings,Ruby程序员可以直接调用QT的类和方法,创建复杂的窗口应用、控件、布局和信号与槽机制,而...

    unite-ruby-require.vim:用于搜索需要的 gem 的 unite.vim 源

    这个 Vim 插件是一个源代码,用于在 Ruby 中搜索require路径。 这个插件会搜索 Ruby 标准库路径、gem 的默认路径和 bundler 的本地路径。 一切都是异步完成的,它也会缓存。 用法 :Unite ruby /require 如果你有很...

    ruby example webrick

    ruby sample: @echo off cd D:\proj\demo rem previously drop tables call rake db:migrate VERSION=0 rem load test data (it depends on the db:environment and db:migrate tasks) call rake db:load_test_...

    Ruby语言中文教程.rar

    Ruby中的控制结构包括条件语句(如`if`、`unless`)、循环(如`for`、`while`、`until`、`times`)和块(用`do..end`或`{..}`包裹)。块可以与方法配合,实现迭代器等功能,例如`each`方法遍历数组或集合。 异常...

    Ruby-dotenv从env加载环境变量

    Ruby-dotenv是一个非常有用的Ruby gem,它允许开发者从一个名为`.env`的文件中加载环境变量,以便在开发环境中管理应用程序的配置。这个工具对于保持敏感信息的安全,如API密钥、数据库凭证或其他不应直接存放在代码...

    autoload机制

    这个函数的任务是解析类名并将其转化为对应的类文件路径,然后通过`require_once`或`include_once`将其加载到内存中。例如,如果有一个`Person`类,`__autoload()`函数可能根据约定将`Person`映射到`Person.class....

    PHP中spl_autoload_register()和__autoload()区别分析

    开发者只需在__autoload()函数中定义好类文件的加载逻辑,如拼接文件路径和使用include或require语句包含文件。然而,__autoload()有一个限制,那就是在同一PHP执行周期内只能存在一个__autoload()函数,不能注册多...

    【跳坑日记】Ubuntu 16.04安装 Ruby2.7.0遇到的坑:cannot load such file — openssl (LoadError)

    在本文中,我们将探讨在Ubuntu 16.04系统上安装Ruby 2.7.0时遇到的一个常见问题:`cannot load such file — openssl (LoadError)`。这是一个与Ruby和OpenSSL库集成有关的问题,通常发生在试图安装或运行依赖于...

    Ruby/tk学习资料

    在本文档中,我们将详细探讨Ruby/tk的基础知识、核心概念及其应用方法。Ruby/tk是一种基于Ruby语言的图形用户界面(GUI)库,它基于Tcl/Tk工具包并进行了封装以适应Ruby的语法和习惯。 #### 1. 引入Ruby/tk 在使用...

    php __autoload自动加载功能详解

    这样,你无需在每个文件顶部都使用 `require_once` 或 `include_once` 引入类文件,只需在项目中设置一次`__autoload`,就可以确保在需要时正确加载类。 二、`__autoload` 函数定义与使用 要实现`__autoload`,你...

    PHP中spl-autoload-register()函数用法实例详解-.docx

    PHP 中 spl_autoload_register() 函数用法实例详解 PHP 中的自动加载机制是指在实例化一个未定义的类时,系统自动加载该类的类文件。spl_autoload_register() 函数是 PHP 中的一个自动加载函数,用于注册自动加载...

Global site tag (gtag.js) - Google Analytics