假设一个脚本需要访问一个目录,比如/some/where/abc在"任意"操作系统上.在Ruby中有几种选择来构建路径:
File.join('', 'some', 'where', 'abc')File.absolute_path("some#{File::SEPARATOR}where#{File::SEPARATOR}abc", File::SEPARATOR)Pathname 在标准API中我相信第一个解决方案足够清楚,但却是惯用的.根据我的经验,一些代码审查要求评论来解释它的作用......
问题
有没有更好的方法来构建绝对路径是Ruby,哪里更好意味着"做好工作并为自己说话"?
如果我进行代码审查,我会发现,在 Windows 上/tmp不一定是创建临时目录的最佳位置,而且最初的'',参数对于它创建的临时审查来说可能并不明显<nothing>/tmp/abc。因此,我推荐这段代码:
File.join(Dir.tmpdir(), 'abc')
Run Code Online (Sandbox Code Playgroud)
请参阅Ruby-doc 以获得解释。
更新
如果我们将问题扩展到不涉及使用的更通用的解决方案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').