ruby加载当前路径

在ruby 1.9之前,ruby的默认加载路径包含当前路径'.',具体可通过 ruby -e 'puts $:'进行查看。如果是1.8的话你可能看到如下的结果

 #linux os
/usr/lib/site_ruby/1.8
/usr/lib/site_ruby/1.8/i386-linux
/usr/lib/site_ruby
/usr/lib/ruby/1.8
/usr/lib/ruby/1.8/i386-linux
.

而在ruby 1.9之后出于安全原因移除了当前路径
 

 #windows os
C:/Ruby193/lib/ruby/site_ruby/1.9.1
C:/Ruby193/lib/ruby/site_ruby/1.9.1/i386-msvcrt
C:/Ruby193/lib/ruby/site_ruby
C:/Ruby193/lib/ruby/vendor_ruby/1.9.1
C:/Ruby193/lib/ruby/vendor_ruby/1.9.1/i386-msvcrt
C:/Ruby193/lib/ruby/vendor_ruby
C:/Ruby193/lib/ruby/1.9.1
C:/Ruby193/lib/ruby/1.9.1/i386-mingw32

但是,在实际编码过程中,加载当前路径下的某个源文件的做法是非常常见也是很有用的,那么如果做到这一点呢?有以下几种方法。

1. 在加载的源文件名前加上当前目录"./",即 require "./test"
2. 使用load加载完整文件名,即 load "test.rb"
3. 使用require_relative替代require,即 require_relative "test"
4.使用解析后的文件路径,即 require File.expand_path("./xxx", __FILE__)
   这里File.expand_path是将制定的参数路径解析成绝对路径,__FILE__是当前目录,./xxx是希望加载的文件
5. 动态修改加载路径,即$LOAD_PATH.unshift(File.dirname(__FILE__)) unless $LOAD_PATH.include?(File.dirname(__FILE__))
其中$LOAD_PATH 指的是Ruby读取外部文件的一个环境变量,其实和windows的环境变量是一个概念。Ruby会在这个环境变量的路径中读取需要require的文 件,如果在环境变量中找不到自己想要的文件,就会报LoadError错误。还有$LOAD_PATH和$:指的都是同一个环境变量,是一样一样的;File.dirname(__FILE__)代表当前路径,而$LOAD_PATH.unshift方法的目的就是将当前目录作用ruby标准的加载路径,即$LOAD_PATH.unshift 就是把上面得出的绝对路径加到现在已经存在所有环境变量之前。File.join是把自己的参数组成一个目录形式的方法,如上面就组成“xxx/../../page/client_arithmetic”(xxx代码rb文件的相对位置)
 

你可能感兴趣的:(Ruby,加载当前路径)