7

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

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

我相信第一个解决方案足够清晰,但又是惯用的。根据我的经验,一些代码审查要求评论来解释它的作用......

问题

有没有更好的方法来构建绝对路径是 Ruby,更好的意思是“完成工作并为自己说话”?

4

2 回答 2

3

如果我在进行代码审查,我会发现在 Windows/tmp上不一定是创建临时目录的最佳位置,而且最初的'',论点对于它创建的随意审查可能并不明显<nothing>/tmp/abc。因此,我会推荐这段代码:

File.join(Dir.tmpdir(), 'abc')

有关解释,请参阅Ruby-doc

更新

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

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

于 2013-09-24T03:32:00.107 回答
2

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

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

于 2013-09-24T01:54:29.223 回答