在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>
答案 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)
您已完美完成所有操作,结果也正确。唯一值得注意的是,
called.rb
时,print_path()仅执行一次calling.rb
时,print_path()执行了两次。因为您需要 calling.rb 中的整个文件 call.rb 。因此,首先执行 called.rb 文件的 print_path()方法,然后执行 calling.rb 文件的 print_path() >方法再次执行。 这就是为什么您两次收到相同结果的原因。对于相同的结果,您将两个文件都放在了同一目录中。这就是为什么您的结果在两个print_path()
执行中也相同的原因。
如果将上述文件中的任何一个放在不同的目录中,则会得到不同的结果。