ruby 正在将路径中的主文件夹折叠为波浪号字符

mqkwyuun  于 12个月前  发布在  Ruby
关注(0)|答案(1)|浏览(134)

在Swift中,abbreviatingWithTildeInPath创建“一个新字符串,用波浪号(~)字符替换当前路径的当前主目录部分”。换句话说,它将/Users/username/Desktop/转换为~/Desktop
在Ruby中,我们可以用File.expand_path来做相反的事情:

File.expand_path('~/Desktop')
# => /Users/username/Desktop/

但是似乎没有本地的方法来用波浪号来表示路径。我是通过以下方式实现的:

'/Users/username/Desktop/'.sub(/^#{ENV['HOME']}/, '~')

这似乎是可靠的工作,但有什么缺陷,我错过了吗?或者更好的是,有没有一个原生的方法?

tjrkku2a

tjrkku2a1#

你的方法有几个微妙的问题

  1. Dir.home是获取主目录的更可靠的方法,以防脚本在奇怪的环境中运行
    1.主目录名称可以包含正则表达式特殊字符,即.,这可能会导致正则表达式中的误报。使用Regexp.escape固定
    1.路径可以是 only 没有尾随斜杠的主目录。修复了字符串结尾或分隔符的正向前看
  2. windows路径可以使用反斜杠。使用File::SEPARATOR修复
  3. Ruby正则表达式是多行的,在这种情况下,^$将找到匹配的 * 第一行 *,而不仅仅是字符串的开头。使用\A\Z修复,但实际上您永远不应该向此方法传递多行字符串。
def File.collapse_path path
  path.sub /\A#{Regexp.escape Dir.home}(?=\Z|#{File::SEPARATOR})/, ?~
end

相关问题