同一目錄下的文件,如/usr/local/ruby/foo.rb與/usr/local/ruby/bar.rb兩個文件。
若是直接在foo.rb中java
1 |
require 'bar' |
執行時會報找不到bar.rb錯誤。
這是由於運行ruby
1 |
/home/oldsong$ ruby /usr/local/ruby/foo.rb |
時會在ruby安裝的lib目錄和/home/oldsong/目錄下查找bar.rb。而不會去rb文件的目錄/usr/local/ruby/下查找。
因此除引用系統rb外,require中不能用相對路徑。
下面結合我我的經驗介紹幾種引用單個和目錄下全部rb的方法。ui
例: 引用當前rb同目錄下的file_to_require.rb
先介紹3種方法spa
1 |
require File .join( __FILE_ , '../file_to_require' )。 |
2 |
require File .expand_path( '../file_to_require' , __FILE__ ) |
3 |
require File .dirname( __FILE__ ) + '/file_to_require' |
其中,File.expand_path是Rails經常使用的作法。
__FILE__爲常量,表示當前文件的絕對路徑,如/home/oldsong/test.rbcode
法四:it
1 |
$LOAD_PATH .unshift( File .dirname( __FILE__ )) |
2 |
require 'bar' |
先把目錄加入LOAD_PATH變量中,而後可直接引用文件名。io
Ruby沒有Java中的import java.io.*;
引用時不能用通配符,估計之後的版本有可能加上。table
例:引用當前rb相同目錄下lib/文件下全部*.rb文件。
法一:class
1 |
Dir [ File .dirname( __FILE__ ) + '/lib/*.rb' ]. each {|file| require file } |
法二:
一個gem搞定test
https://rubygems.org/gems/require_all