__FILE__在Ruby中是什么意思?

bxjv4tth  于 2022-11-04  发布在  Ruby
关注(0)|答案(4)|浏览(192)

我在Ruby中经常看到这样的情况:

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

__FILE__是什么意思?

nue99wik

nue99wik1#

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

**编辑:**Ruby 1.9.2和1.9.3的表现似乎与Luke Bayes在他的评论中所说的有些不同。

第一个
运行ruby test.rb将输出

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

mhd8tkvw2#

__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
7y4bm7vi

7y4bm7vi3#

__FILE__是包含正在执行的代码的文件的文件名及其扩展名。
foo.rb中,__FILE__将是“foo.rb”。
如果foo.rb位于目录/home/josh中,则File.dirname(__FILE__)将返回/home/josh

ws51t4hk

ws51t4hk4#

在Ruby中,不管怎样,Windows版本,我只是检查了一下,__FILE__并不包含文件的完整路径,而是包含了文件相对于执行位置的路径。
在PHP中,__FILE__是完整路径(在我看来,这是更可取的)。这就是为什么,为了使路径在Ruby中可移植,您真的需要使用以下代码:

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

我应该注意到在Ruby 1.9.1中__FILE__包含了文件的完整路径,上面的描述是针对我使用Ruby 1.8.7时的情况。
为了与Ruby 1.8.7和1.9.1(不确定1.9)兼容,您应该使用上面显示的结构来要求文件。

相关问题