在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/josh则File.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),你应该使用我上面展示的构造文件来需要文件。