我看到这一切在Ruby中的时间:__FILE__在Ruby中的含义是什么?
require File.dirname(__FILE__) + "/../../config/environment"
是什么__FILE__
意思?
我看到这一切在Ruby中的时间:__FILE__在Ruby中的含义是什么?
require File.dirname(__FILE__) + "/../../config/environment"
是什么__FILE__
意思?
它是对当前文件名的引用。在文件foo.rb
中,__FILE__
将被解释为"foo.rb"
。
编辑: Ruby 1.9.2和1.9.3的表现与Luke Bayes在his comment中的表现略有不同。与这些文件:
# 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__是从当前执行目录到文件的“相对”路径 - 不是绝对的。您必须使用文件。expand_path(__ FILE__)获取绝对路径 – 2009-09-09 21:29:57
上面的注释中自动删除了双下划线。 – 2009-09-09 21:30:41
在ruby 1.9.2中这仍然是真的吗? – Zasz 2011-09-03 15:58:07
__FILE__
是用含有正被执行的代码的文件的扩展名的文件名。
在foo.rb
,__FILE__
将是“foo.rb”。
如果foo.rb
位于目录/home/josh
那么File.dirname(__FILE__)
将返回/home/josh
。
在Ruby中,Windows版本无论如何,我只是检查和__FILE__
不包含文件的完整路径。相反,它包含文件相对于执行文件的路径。
在PHP __FILE__
是完整的路径(在我看来这是最好的)。这就是为什么,为了使你的路在Ruby中随身携带,你真的需要使用这样的:
File.expand_path(File.dirname(__FILE__) + "relative/path/to/file")
我要指出的是,在1.9.1 __FILE__
包含该文件的完整路径,上面的描述是因为当时我使用Ruby 1.8.7。
为了与Ruby 1.8.7和1.9.1兼容(不确定约1.9),您应该使用上面显示的构造来需要文件。
__FILE__
的值是在加载文件时创建并存储(但从未更新)的相对路径。这意味着如果您在应用程序的其他任何位置有任何对Dir.chdir
的调用,此路径将错误地扩展。
puts __FILE__
Dir.chdir '../../'
puts __FILE__
一种解决此问题的是存储的任何应用程序代码以外的__FILE__
扩展后的值。只要您的require
声明位于您的定义的顶部(或至少在对Dir.chdir
的任何调用之前),该值在更改目录后仍然有用。
$MY_FILE_PATH = File.expand_path(File.dirname(__FILE__))
# open class and do some stuff that changes directory
puts $MY_FILE_PATH
帮扎在一起的引用,也见https://www.ruby-forum.com/topic/143383和http://stackoverflow.com/questions/4325759/is-require-file-expand- path-file-the-best-practice?lq = 1 – 2014-02-26 17:04:44