在Ruby中__FILE__是什么意思?

我一直在Ruby中看到这个:

require File.dirname(__FILE__) + "/../../config/environment" 

__FILE__是什么意思?

它是对当前文件名称的引用。 在文件foo.rb__FILE__将被解释为"foo.rb"

编辑: Ruby 1.9.2和1.9.3performance出与Luke Bayes在评论中所说的有些不同。 有了这些文件:

 # test.rb puts __FILE__ require './dir2/test.rb' 
 # dir2/test.rb puts __FILE__ 

运行ruby test.rb会输出

 test.rb /full/path/to/dir2/test.rb 

__FILE__的值是一个相对path,在你的文件被加载时被创build和存储(但从未更新)。 这意味着如果您在应用程序的其他任何位置有任何对Dir.chdir调用,则此path将错误地展开。

 puts __FILE__ Dir.chdir '../../' puts __FILE__ 

解决此问题的一个方法是将__FILE__的扩展值存储在任何应用程序代码之外。 只要您的require语句位于您的定义的顶部(或者至less在调用Dir.chdir之前),在更改目录之后,此值将继续有用。

 $MY_FILE_PATH = File.expand_path(File.dirname(__FILE__)) # open class and do some stuff that changes directory puts $MY_FILE_PATH 

__FILE__是包含正在执行的代码的文件的扩展名。

foo.rb__FILE__将是“foo.rb”。

如果foo.rb位于dir /home/joshFile.dirname(__FILE__)将返回/home/josh

在Ruby中,Windows版本无论如何,我只是检查和__FILE__不包含文件的完整path。 相反,它包含文件相对于执行的path。

在PHP __FILE__是完整的path(在我看来是可取的)。 这就是为什么为了使你的path在Ruby中可移植,你真的需要使用这个:

 File.expand_path(File.dirname(__FILE__) + "relative/path/to/file") 

我应该注意到,在Ruby 1.9.1中, __FILE__包含文件的完整path,上面的描述适用于我使用Ruby 1.8.7的情况。

为了兼容Ruby 1.8.7和1.9.1(不确定大约1.9),你应该使用我上面展示的构造文件来需要文件。