• Ruby的require相关知识


    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 語法放大鏡和Ruby api中内容。

  • 相关阅读:
    TIOBE 2011年5月编程语言排行榜:C#和ObjectiveC上升趋势不减 狼人:
    20款绝佳的HTML5应用程序示例 狼人:
    为什么开发人员不能估算时间? 狼人:
    4款基于Django框架的开源软件推荐 狼人:
    jQuery 1.6正式版发布 狼人:
    设计者更喜欢什么操作系统 狼人:
    网络结点流网络浅析 By ACReaper
    效果实现SWFUpload在JQueryUI的Dialog中无法实现上传功能
    响应中断向量美妙的微机原理2013/5/2(2)
    内存图片IOS app启动动画的实现
  • 原文地址:https://www.cnblogs.com/highsky/p/5840865.html
Copyright © 2020-2023  润新知