Ruby 为什么只对匹配多个';的正则表达式使用%r/';性格

Ruby 为什么只对匹配多个';的正则表达式使用%r/';性格,ruby,Ruby,我知道在Ruby中使用%r{some regex}将自动跳过我的正则表达式中的所有正斜杠,但显然,如果正则表达式中只有一个正斜杠,我们不应该使用它 我在多个Ruby风格指南(即and)中看到了这一点,Rubocop默认将其标记,但我找不到对此的解释 如果正则表达式中只有一个正斜杠,为什么不使用%r?仅仅因为这个符号只帮助你不逃避一个斜杠,看起来并不是一个不使用它的好理由 显然,如果正则表达式中只有一个正斜杠,就不应该使用它 事实并非如此 我在多个Ruby风格指南(即此处和此处)中都提到过这一点

我知道在Ruby中使用
%r{some regex}
将自动跳过我的正则表达式中的所有正斜杠,但显然,如果正则表达式中只有一个正斜杠,我们不应该使用它

我在多个Ruby风格指南(即and)中看到了这一点,Rubocop默认将其标记,但我找不到对此的解释

如果正则表达式中只有一个正斜杠,为什么不使用
%r
?仅仅因为这个符号只帮助你不逃避一个斜杠,看起来并不是一个不使用它的好理由

显然,如果正则表达式中只有一个正斜杠,就不应该使用它

事实并非如此

我在多个Ruby风格指南(即此处和此处)中都提到过这一点

你是根据有限的观察得出结论的。这只是这些人自己的决定。然而,任何同情这些人的人都可能试图传播这种做法

不过,我认为这种说法是有道理的。我认为在不同的场合,Ruby有几种表达相同事物的方式。随机选择一种或另一种方式会使代码难以阅读,并可能导致人为错误。因此,如果可能的话,我们应该坚持使用单一的符号。这也适用于regex-literal。由于
/
是最简洁且无标记的正则表达式,因此我们应该尽可能坚持使用它


因此,是否使用
%r
符号应取决于优点(避免省略斜杠的必要性)是否大于缺点(与使用标准
/
符号和/或使用更长的符号不同)。这些人似乎认为,一次刀砍(一次逃跑)并不能使利大于弊,但两次或两次以上就可以了。这是有道理的,因为
%r{}
表示法比
/
多需要两个字符,所以当后者需要两个转义时,它就成了一个结,除此之外,
%r{}
就成了较短的表示法。

关于Ruby文本的文档中没有这样的限制。我会使用看起来更可读的符号,我认为当正则表达式中有斜杠时,
%r
符号显然是胜利者。

编程中一个更刺激视觉的方面是处理字符串/路径和正则表达式中的转义字符。令人恼火的是,几年前人们给它起了个名字

在Ruby中引入
%r
%q
%q
,以及在Perl和其他语言中引入类似内容,是为了减少视觉噪音。处理包含斜线的长字符串和模式会使我们的眼睛疲劳,大脑麻木,从而导致错误和错误

使用常识和团队/团队共识来确定是否使用
/
%r{}
或其他分隔符,并记住在处理LTS时要对未来的自己和/或团队成员仁慈。凌晨3点调试和盯着转义斜杠可能会令人沮丧


就自动添加转义而言,不,Ruby不会这样做。PHP有“”,所以可能有人把他们的想法混淆了。

它并没有逃过斜杠,它只是没有让斜杠成为需要首先逃过的元字符。我猜
/regex/
在一些随机编辑器中更常见,更可能以正确的方式着色。
%r(/)
是5个字符长度,而
/\/
是4个字符。“如果正则表达式中只有一个正斜杠,为什么不使用%r?”为什么不一直使用它?别让时尚警察告诉你该怎么做。在ruby社区中有太多这样的废话了。关于遵循样式指南有一点需要强调,但是在我们的团队中,我告诉他们阅读指南,理解为什么推荐某些样式,然后使用最清晰、最容易阅读和维护的代码,这也是用ruby的方式完成的。编写像Perl、Java或C这样的Ruby是行不通的,但这仍然会留下一些回旋余地。如果模式中有大量斜杠,我会很快切换到
%r{…}
。例如,无所不在的:
%r{\Ahttps?://}
。视觉噪音在Perl中并不是一个真正的问题,它已经是语言的一部分。给人们提供选项是Perl所关注的首要问题,也是Perl所接受的文化的一部分。在某些人看来,这不是一个问题。这是我们在用Perl编程时所做的事情之一。事实上,我在工作中编写了一个应用程序,几年后就因为编写了可读性极强的Perl而受到赞扬。维护它的人喜欢它是多么容易理解和阅读。但我在阅读了别人的C类Perl代码后学会了这一点,就像C一样,Perl有很多无法避免的语法包袱。在编写大量Perl时,我尽了最大努力保持它的整洁,但我敢打赌,与一般的Ruby代码相比,您绝对最原始的Perl看起来就像一辆火车的残骸。Perl中最简单的解决方案对局外人来说几乎是无法理解的,它的密度太高了。Ruby中最简单的解决方案通常非常令人愉快。这正是我们不再用Perl编写生产代码的原因。:-)