Ruby require 路徑問題

require 負責引用一個外部文件,能夠省略".rb"字樣。ruby

如:ui

require 'foo.bar'

等價於spa

require 'foo'

 

在Ruby中,同一目錄下的文件, /home/andy/ruby/foo.rb /home/andy/ruby/bar.rb兩個文件.code

若是直接在foo.rb中寫 blog

require 'bar'

執行時會報找不到bar.rb錯誤。這是由於ruby不會再當前目錄進行查找。class

此處列舉幾種引用單個文件的方法:require

1 require File.join(__FILE__, '../bar.rb')
2 require File.dirname(__FILE__) + '/bar.rb'
3 require File.expand_path('../bar.rb', __FILE__)

1. __FILE__是常量,表示當前文件的絕對路徑,如/home/andy/ruby/foo.rb變量

2. File.dirname(__FILE__)表示當前文件相對路徑,參見以下代碼:引用

1 代碼:puts 'File.dirname(__FILE__) is : ' + File.dirname(__FILE__)
2 輸出:File.dirname(__FILE__) is : .

3. File.expand_path表示當前文件的絕對路徑,參見以下代碼:方法

1 代碼:
2 puts 'File.expand_path(__FILE__) : ' + File.expand_path(__FILE__)
3 puts 'File.expand_path("..",__FILE__) : ' + File.expand_path('..',__FILE__)
4 
5 輸出:
6 File.expand_path(__FILE__) : /home/andy/foo.rb
7 File.expand_path("..",__FILE__) : /home/andy

或者使用

1 $LOAD_PATH.unshift(File.dirname(__FILE__))
2 require 'bar'
3 
4 $LOAD_PATH.unshift(File.expand_path('..', __FILE__))
5 require 'bar'

這種作法是先把目錄加入$LOAD_PATH變量中,而後能夠直接飲用文件名。

相關文章
相關標籤/搜索