【发布时间】:2023-03-18 06:32:01
【问题描述】:
你喜欢哪种风格的 Ruby 字符串引用?到目前为止,我一直使用'single quotes',除非字符串包含某些转义序列或插值,在这种情况下我显然必须使用"double quotes"。
但是,真的有任何理由不在各处使用双引号字符串吗?
【问题讨论】:
你喜欢哪种风格的 Ruby 字符串引用?到目前为止,我一直使用'single quotes',除非字符串包含某些转义序列或插值,在这种情况下我显然必须使用"double quotes"。
但是,真的有任何理由不在各处使用双引号字符串吗?
【问题讨论】:
如果必须转义,请不要使用双引号。并且不要陷入“单引号对双引号”的陷阱。 Ruby 对字符串文字的任意分隔符有很好的支持:
网站镜像 - https://web.archive.org/web/20160310224440/http://rors.org/2008/10/26/dont-escape-in-strings
【讨论】:
除非需要插值,否则我总是使用单引号。
为什么?它看起来更好。当屏幕上有大量内容时,与大量双引号相比,大量单引号会给您带来更少的“视觉混乱”。
我想指出,这不是我刻意决定要做的事情,只是我随着时间的推移“进化”以试图获得更好看的代码。
如果我需要内联引号,我偶尔会使用 %q 或 %Q。我只使用过 heredocs 一次或两次。
【讨论】:
像许多程序员一样,我尽量做到具体。这意味着我试图通过让我的代码尽可能简单来让编译器做尽可能少的工作。所以对于字符串,我使用最简单的方法来满足我对该字符串的需求。
<<END
For strings containing multiple newlines,
particularly when the string is going to
be output to the screen (and thus formatting
matters), I use heredocs.
END
%q[Because I strongly dislike backslash quoting when unnecessary, I use %Q or %q
for strings containing ' or " characters (usually with square braces, because they
happen to be the easiest to type and least likely to appear in the text inside).]
"For strings needing interpretation, I use %s."%['double quotes']
'For the most common case, needing none of the above, I use single quotes.'
我对程序提供的语法高亮质量的第一个简单测试是查看它处理所有引用方法的能力。
【讨论】:
除非需要插值,否则我会使用单引号。当您需要插值时,稍后更改会很麻烦的论点也在另一个方向上摆动:当您发现字符串中有 # 或 \ 导致您没有转义时,您必须从 double 更改为 single 。不打算。
默认使用单引号的优点是,在采用此约定的代码库中,引号类型充当了是否需要插值表达式的视觉提示。当您的编辑器或 IDE 以不同方式突出显示两种字符串类型时,这一点会更加明显。
我对多行字符串使用 %{.....} 语法。
【讨论】:
除非我特别需要禁用转义/插值,否则我通常使用双引号。
【讨论】:
我看到了两者的论据:
主要使用双引号:
对于使用单双引号的某种组合:
【讨论】:
我曾经使用单引号,直到我知道我需要插值。然后我发现当我回去必须将一些单引号更改为双引号时,我浪费了很多时间。性能测试显示使用双引号对速度没有可测量的影响,因此我主张始终使用双引号。
唯一的例外是在替换字符串中使用带有反向引用的 sub/gsub。那么你应该使用单引号,因为它更简单。
mystring.gsub( /(fo+)bar/, '\1baz' )
mystring.gsub( /(fo+)bar/, "\\1baz" )
【讨论】:
我使用单引号,除非我需要插值,或者字符串包含单引号。
但是,我刚刚从 Dejan 的回答中学到了任意分隔符技巧,我认为这很棒。 =)
【讨论】:
单引号保留其中的字符。但是双引号会评估和解析它们。请参阅以下示例:
"Welcome #{@user.name} to App!"
结果:
欢迎 Bhojendra 使用 App!
但是,
'Welcome #{@user.name} to App!'
结果:
欢迎 #{@user.name} 使用 App!
【讨论】: