让我们假设一个脚本需要访问一个目录,比如“任意”操作系统上的/some/where/abc
。在Ruby中有几种选择来构建路径:
File.join('', 'some', 'where', 'abc')
File.absolute_path("some#{File::SEPARATOR}where#{File::SEPARATOR}abc", File::SEPARATOR)
Pathname
我认为第一种解决方案足够清楚,但却是惯用的。根据我的经验,一些代码审查要求评论来解释它的作用......
问题
有没有更好的方法来建立一个绝对路径是Ruby,哪里更好意味着“做好工作并为自己说话”?
答案 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的观点,提到文档是向审阅者解释代码的最佳方式。