我正在通过Lynda.com Ruby类(class)并正在构建一个小型应用程序。
为了使文件可移植,老师使用以下表格。
APP_ROOT = File.dirname(__FILE__)
我了解常数 FILE 的目的,因为无论文件名如何,它始终会解析当前文件。

当我键入p APP_ROOT时,它解析为。我理解的# => '.'代表此当前目录。

我不明白为什么,如果File.dirname(__FILE__)总是== '.',为什么不只使用'。'。 ?

例如输出:
$LOAD_PATH.unshift( File.join(APP_ROOT, 'lib'))p $:
等于
$LOAD_PATH.unshift( File.join('.', 'lib'))p $:
当我p $:时,对于任何一行我都得到相同的准确结果。 “。”上的File.dirname(__FILE__)的值是什么? ?

另外,我到处搜索,但不确定。
如果我在目录/home/one/apps

如果我输入'.'是等于apps目录,还是意味着包括最终目录在内的整个绝对路径?所以.确实是/home/ones/apps,而不仅仅是/apps
提前致谢。

最佳答案

File.dirname(__FILE__)并不总是与当前目录相同。如果从与文件相同的目录中启动Ruby程序,则将是相同的;但是,如果从不同的目录中启动,则将有所不同。

例如,如果您有一个子目录subdir,其中包含foo.rb及其内容:

puts File.dirname(__FILE__)

然后从父目录运行,您将获得以下信息:
$ ruby subdir/foo.rb
subdir

但是,如果您将cd放入目录中,然后运行文件,则会得到以下信息:
$ cd subdir
$ ruby foo.rb
.

关于ruby - RUBY中 '.'和File.dirname(__ FILE__)之间的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50888889/

10-12 12:39