gpt4 book ai didi

ruby - 使 ruby​​ Pathname#join 像 File.join 一样而不破坏接收者路径的简单方法?

转载 作者:太空宇宙 更新时间:2023-11-03 18:00:07 24 4
gpt4 key购买 nike

根据 ruby​​doc,如果传递给 Pathname#join(或 Pathname#+)的参数是绝对的,方法接收者的路径将被完全忽略。示例:

Pathname('/home/foo').join '/etc/passwd'
# => #<Pathname:/etc/passwd>

但是

File.join('/home/foo', '/etc/passwd')
# => "/home/foo/etc/passwd"

路径名通常使用起来很愉快,但它的连接行为真的很烦人,我想不出什么时候我会希望这种情况发生。

有没有像 File.join 这样的现有方法?它应该对路径名和字符串进行操作。

像这样冗长的解决方案是 Not Acceptable :

Pathname( File.join(pn, '/etc/passwd') )

我可以接受猴子补丁,但它们必须比这更好:

class Pathname
def safe_join(other)
Pathname.new(File.join(self, other))
end
end

最佳答案

File.expand_path 的行为与此相同,我认为这是正确的行为。

File.join 以不同的方式运行,仅用于使用适当的分隔符连接路径的元素,其中 /\ 甚至 : 的使用取决于操作系统。

File.expand_path 在另一个上下文中解释路径规范,并允许以不同于绝对路径的方式处理相对路径。这是一个重要的区别,尤其是对于配置文件。

如果您要创建自己的方法,您可能需要给它一个不同的名称,例如 hard_joinconcat

关于ruby - 使 ruby​​ Pathname#join 像 File.join 一样而不破坏接收者路径的简单方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6666992/

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