为什么把File.expand_path(File.dirname(File.dirname(__ FILE__)))给我不同的结果?

时间:2015-08-15 11:42:42

标签: ruby

在Win7上使用ruby 2.0.0p481(2014-05-08)[x64-mingw32]

在目录中(确切地说d:\download\ruby)我有两个文件 - calling.rb和called.rb

calling.rb

require_relative 'called'
print_path()

called.rb

def print_path()
  puts "File.expand_path(File.dirname(__FILE__)) is #{File.expand_path(File.dirname(__FILE__))}"
  puts "File.expand_path(File.dirname(File.dirname(__FILE__))) is #{File.expand_path(File.dirname(File.dirname(__FILE__)))}"
  puts File.expand_path(File.dirname(__FILE__))
end
print_path()

有人可以解释为什么直接执行call.rb给我

d:\download\ruby>ruby called.rb
File.expand_path(File.dirname(__FILE__)) is d:/download/ruby
File.expand_path(File.dirname(File.dirname(__FILE__))) is d:/download/ruby
d:/download/ruby

使用来自calling.rb的相同代码时的结果不同?

d:\download\ruby>ruby calling.rb
File.expand_path(File.dirname(__FILE__)) is d:/download/ruby
File.expand_path(File.dirname(File.dirname(__FILE__))) is d:/download
d:/download/ruby
File.expand_path(File.dirname(__FILE__)) is d:/download/ruby
File.expand_path(File.dirname(File.dirname(__FILE__))) is d:/download
d:/download/ruby

d:\download\ruby>

2 个答案:

答案 0 :(得分:3)

由于__FILE__是当前的源文件名,因此当前'这是关键字。

您还可以在嵌套中获取目录的目录名称。

要解决此问题,可能以下放置行将有所帮助:

def print_path()
  puts "File.expand_path(File.dirname(__FILE__)) is #{File.expand_path(File.dirname(__FILE__))}"
  puts "File.expand_path(File.dirname(File.dirname(__FILE__))) is #{File.expand_path(File.dirname(File.dirname(__FILE__)))}"
  puts File.expand_path(File.dirname(__FILE__))
end

答案 1 :(得分:0)

您已完美完成所有操作,结果也正确。唯一值得注意的是,

  1. 执行called.rb时,print_path()仅执行一次
  2. 但是当您执行calling.rb时,print_path()执行了两次。因为您需要 calling.rb 中的整个文件 call.rb 。因此,首先执行 called.rb 文件的 print_path()方法,然后执行 calling.rb 文件的 print_path() >方法再次执行。

这就是为什么您两次收到相同结果的原因。对于相同的结果,您将两个文件都放在了同一目录中。这就是为什么您的结果在两个print_path()执行中也相同的原因。

如果将上述文件中的任何一个放在不同的目录中,则会得到不同的结果。