我正在通过Lynda.com Ruby课程并构建一个小应用程序。 为了使文件可移植,教师使用下面的表格。
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
提前致谢。
答案 0 :(得分:3)
File.dirname(__FILE__)
不始终与当前目录相同。如果从与文件相同的目录启动Ruby程序,它将是相同的,但如果从不同的目录开始则会有所不同。
例如,如果您的子目录subdir
包含foo.rb
,其内容为:
puts File.dirname(__FILE__)
然后从父目录运行你得到这个:
$ ruby subdir/foo.rb
subdir
但是如果您cd
进入目录然后运行该文件就可以得到:
$ cd subdir
$ ruby foo.rb
.