Ruby 中的 __FILE__ 是什么意思?
我在 Ruby 中经常看到这样的情况:
require File.dirname(__FILE__) + "/../../config/environment"
__FILE__
是什么意思?
I see this all the time in Ruby:
require File.dirname(__FILE__) + "/../../config/environment"
What does __FILE__
mean?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
它是对当前文件名的引用。 在文件
foo.rb
中,__FILE__
将被解释为"foo.rb"
。编辑: Ruby 1.9.2 和 1.9.3 的行为似乎与 Luke Bayes 在 他的评论。 使用这些文件:
运行 ruby test.rb 将输出
It is a reference to the current file name. In the file
foo.rb
,__FILE__
would be interpreted as"foo.rb"
.Edit: Ruby 1.9.2 and 1.9.3 appear to behave a little differently from what Luke Bayes said in his comment. With these files:
Running
ruby test.rb
will output__FILE__
的值是加载文件时创建和存储(但从未更新)的相对路径。 这意味着,如果您在应用程序的其他任何地方调用Dir.chdir
,则该路径将错误扩展。解决此问题的一种方法是在任何应用程序代码之外存储
__FILE__
的扩展值。 只要您的require
语句位于定义的顶部(或至少在对Dir.chdir
的任何调用之前),该值在更改目录后将继续有用。The value of
__FILE__
is a relative path that is created and stored (but never updated) when your file is loaded. This means that if you have any calls toDir.chdir
anywhere else in your application, this path will expand incorrectly.One workaround to this problem is to store the expanded value of
__FILE__
outside of any application code. As long as yourrequire
statements are at the top of your definitions (or at least before any calls toDir.chdir
), this value will continue to be useful after changing directories.__FILE__
是包含正在执行的代码的文件扩展名的文件名。在
foo.rb
中,__FILE__
将是“foo.rb”。如果 foo.rb 位于目录
/home/josh
中,则File.dirname(__FILE__)
将返回/home/josh< /代码>。
__FILE__
is the filename with extension of the file containing the code being executed.In
foo.rb
,__FILE__
would be "foo.rb".If
foo.rb
were in the dir/home/josh
thenFile.dirname(__FILE__)
would return/home/josh
.在 Ruby(Windows 版本)中,我刚刚检查过,
__FILE__
不包含文件的完整路径。 相反,它包含相对于文件执行位置的文件路径。在 PHP 中,
__FILE__
是完整路径(我认为这是更好的路径)。 这就是为什么,为了让你的路径在 Ruby 中可移植,你确实需要使用这个:我应该注意,在 Ruby 1.9.1 中
__FILE__
包含文件的完整路径,上面的描述是当我使用 Ruby 1.8.7 时。为了与 Ruby 1.8.7 和 1.9.1(不确定 1.9)兼容,您应该使用我上面展示的构造来请求文件。
In Ruby, the Windows version anyways, I just checked and
__FILE__
does not contain the full path to the file. Instead it contains the path to the file relative to where it's being executed from.In PHP
__FILE__
is the full path (which in my opinion is preferable). This is why, in order to make your paths portable in Ruby, you really need to use this:I should note that in Ruby 1.9.1
__FILE__
contains the full path to the file, the above description was for when I used Ruby 1.8.7.In order to be compatible with both Ruby 1.8.7 and 1.9.1 (not sure about 1.9) you should require files by using the construct I showed above.