gpt4 book ai didi

ruby - File.dirname 的混淆行为

转载 作者:数据小太阳 更新时间:2023-10-29 07:23:55 24 4
gpt4 key购买 nike

我使用 Ruby 1.9.3 编写了一些用于系统管理的小 Ruby 脚本。在我使用的一个脚本中:

File.dirname(__FILE__)

获取脚本文件的目录。这将返回一个相对路径,但是当我从第二个脚本 File.dirname 调用脚本时返回一个绝对路径。

Ruby Doc在其示例中列出了绝对返回路径,而我在 Ruby Forum 上找到了讨论用户说 dirname 应该只返回相对路径。

我正在使用 Ruby 论坛建议的解决方案来使用 File.expand_path 来始终获得这样的绝对路径:

File.expand_path(File.dirname(__FILE__))

但是有没有办法使 dirname 的行为保持一致?


更新:

为了扩展 Janathan Cairs 的回答,我制作了两个脚本:

s1.rb:

puts "External script __FILE__: #{File.dirname(__FILE__)}"

s0.rb:

puts "Local script __FILE__: #{File.dirname(__FILE__)}"
require './s1.rb'

运行 ./s0.rb 给出以下输出:

Local script __FILE__: .
External script __FILE__: /home/kenneth/Pictures/wp/rip_vault

最佳答案

File.dirname 如果给定绝对路径,则应返回绝对路径;如果给定相对路径,则应返回相对路径:

File.dirname('/home/jon/test.rb') # => '/home/jon'
File.dirname('test.rb') # => '.'

__FILE__ 返回当前脚本的名称,因此它是当前目录的相对路径。这意味着如果您想使用 File.dirname(__FILE__) 获取绝对路径,您应该始终使用 expand_path

注意 ruby 2.0.0 introduces the __dir__ constant

关于ruby - File.dirname 的混淆行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15358669/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com