如何在Ruby中构建可移植的绝对路径?

时间:2013-09-24 01:00:56

标签: ruby

让我们假设一个脚本需要访问一个目录,比如“任意”操作系统上的/some/where/abc。在Ruby中有几种选择来构建路径:

  • File.join('', 'some', 'where', 'abc')
  • File.absolute_path("some#{File::SEPARATOR}where#{File::SEPARATOR}abc", File::SEPARATOR)
  • 标准API中的
  • Pathname

我认为第一种解决方案足够清楚,但却是惯用的。根据我的经验,一些代码审查要求评论来解释它的作用......

问题

有没有更好的方法来建立一个绝对路径是Ruby,哪里更好意味着“做好工作并为自己说话”?

2 个答案:

答案 0 :(得分:3)

如果我正在进行代码审查,我会提到的是,在/tmp上,'',不一定是创建临时目录的最佳位置,而且初始<nothing>/tmp/abc参数也许并不明显经常评论它创造了File.join(Dir.tmpdir(), 'abc') 。因此,我建议使用此代码:

tmpdir()

请参阅Ruby-doc for an explanation

<强>更新

如果我们将问题扩展到不涉及使用''的更通用的解决方案,我无法看到使用初始'/'习惯用法(hack?)的方法。在Linux上,这可能不是太大的问题,但在具有多个驱动器号的Windows上它将是。此外,似乎没有用于迭代挂载点的Ruby API或gem。

因此,我的建议是将挂载点定义委托给一个配置选项,该配置选项可能是Linux的'z:/',Windows的smb://domain;user@my.file.server.com/mountpoint和Samba共享的File.join(ProjectConfig::MOUNT_POINT, 'some', 'where', 'abc'),然后使用{{1}}。

答案 1 :(得分:2)

File#join是在Ruby中构建可移植路径的规范方法。我想知道谁在做审查。也许Ruby对您的组织来说是新手。

我同意@ChrisHeald的观点,提到文档是向审阅者解释代码的最佳方式。