Ruby 为什么要将File.expand_path(File.dirname(File.dirname(_File__)))放在一起给我不同的结果?
在Win7上使用ruby 2.0.0p481(2014-05-08)[x64-mingw32] 在一个目录中(Ruby 为什么要将File.expand_path(File.dirname(File.dirname(_File__)))放在一起给我不同的结果?,ruby,Ruby,在Win7上使用ruby 2.0.0p481(2014-05-08)[x64-mingw32] 在一个目录中(d:\download\ruby),我有两个文件——calling.rb和called.rb 呼叫.rb require_relative 'called' print_path() def print_path() puts "File.expand_path(File.dirname(__FILE__)) is #{File.expand_path(File.dirname(_
d:\download\ruby
),我有两个文件——calling.rb和called.rb
呼叫.rb
require_relative 'called'
print_path()
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()
调用.rb
require_relative 'called'
print_path()
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()
有人能解释一下为什么直接调用.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>
因为
\uuuuu FILE\uuuuu
是当前源文件名,“current”是此处的关键字
您还将获得嵌套中某个目录的目录名
要解决此问题,以下几行可能会有所帮助:
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
你做的一切都很完美,结果也是正确的。这里唯一值得注意的是
calling.rb
时,print_path()执行了两次。因为您需要调用.rb中的整个文件called.rb。因此,首先执行被调用的.rb文件的print\u path()方法,然后再次执行调用的.rb文件的print\u path()方法print\u path()
执行中的结果也相同
如果将上述文件中的任何一个放在不同的目录下,您将得到不同的结果。要跟踪
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。然后,您将看到当前文件是什么,以及\uuuuu file\uuuu
变量如何表示它。您能建议在何处以及使用什么来调试吗?我要说的是,我使用的put
足够好,可以看到发生了什么。我的示例的最后一行是非嵌套的,但在疑难解答中显示了两种方法,将行放在上面。明白了。我从某个地方复制了代码,要么错误地嵌套了它,要么就是这样。谢谢你的解释。但是嵌套没有解释为什么,当直接执行called.rb时,我在所有3行中得到相同的路径。-我更新了我的问题。我使用了你的调试行并添加了结果。@vgoff,这里没什么错,Radek唯一使用斜杠的地方是在他的提示符和解释中,他在windows机器上显示了文件运行的路径,并且在windows机器上进行了更正Ruby puts的输出在每个操作系统中都是正向斜杠,欢迎来到windows world of 8>)命令行提示现在更加清晰,输出之间的分隔也更加清晰。