当前位置:  开发笔记 > 编程语言 > 正文

__FILE__在Ruby中意味着什么?

如何解决《__FILE__在Ruby中意味着什么?》经验,为你挑选了4个好方法。

我一直在Ruby中看到这个:

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

什么__FILE__意思?



1> Geoff..:

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

编辑: Ruby 1.9.2和1.9.3似乎与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__是当前执行目录中文件的"相对"路径 - 不是绝对的.您必须使用File.expand_path(__ FILE__)来获取绝对路径
@LukeBayes您可以通过用反引号包围文字文本来保留Stack Overflow注释中的下划线和其他特殊字符.写`\`__FILE __ \``得到`__FILE__`.
在上面的评论中自动删除了双下划线.
@Zasz它在1.9.2中有点不同.最初加载的文件具有相对\ _ _ _ FILE\_ _ _,但其他包含/必需文件具有绝对路径.

2> Luke Bayes..:

__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



3> Ethan..:

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

foo.rb,__FILE__将是"foo.rb".

如果foo.rb在dir中/home/josh然后File.dirname(__FILE__)会返回/home/josh.



4> Matt Wolfe..:

在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),您应该使用上面显示的构造来要求文件.


您永远不应该硬编码目录分隔符.使用File.join:`File.expand_path(File.join(File.dirname(__ FILE__),"relative","path","to","file"))`
推荐阅读
ERIK又
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有