你喜欢哪种类型的Ruby字符串引用?

你喜欢哪种类型的Ruby字符串引用?,ruby,string,Ruby,String,你喜欢哪种类型的Ruby字符串引用?到目前为止,我一直使用“单引号”,除非字符串包含某些转义序列或插值,在这种情况下,我显然必须使用“双引号” 但是,真的有什么理由不到处使用双引号字符串吗?除非我特别需要禁用转义/插值,否则我通常使用双引号。除非我需要插值,否则我总是使用单引号 为什么??看起来好多了。当屏幕上有很多东西时,大量的单引号比大量的双引号给你带来的“视觉混乱”要少 我想指出的是,这并不是我故意决定要做的事情,只是我在试图实现更漂亮的代码时随着时间的推移而“进化”的事情 如果需要行内引

你喜欢哪种类型的Ruby字符串引用?到目前为止,我一直使用
“单引号”
,除非字符串包含某些转义序列或插值,在这种情况下,我显然必须使用
“双引号”


但是,真的有什么理由不到处使用双引号字符串吗?

除非我特别需要禁用转义/插值,否则我通常使用双引号。

除非我需要插值,否则我总是使用单引号

为什么??看起来好多了。当屏幕上有很多东西时,大量的单引号比大量的双引号给你带来的“视觉混乱”要少

我想指出的是,这并不是我故意决定要做的事情,只是我在试图实现更漂亮的代码时随着时间的推移而“进化”的事情


如果需要行内引号,我偶尔会使用%q或%q。我只使用过一次或两次heredocs。

如果必须避开它们,请不要使用双引号。不要陷入“单引号对双引号”的陷阱。Ruby非常支持字符串文本的任意分隔符:

现场镜子-

原址-

除非需要插值或字符串包含单引号,否则我使用单引号


然而,我刚刚从Dejan的答案中学到了任意分隔符的技巧,我认为这很棒。=)

我以前使用单引号,直到我知道我需要插值。然后我发现,当我回到过去,不得不将一些单引号改为双引号时,我浪费了很多时间。性能测试表明,使用双引号对速度没有明显影响,所以我主张始终使用双引号

唯一的例外是在替换字符串中使用sub/gsub和反向引用时。那么你应该使用单引号,因为它更简单

mystring.gsub( /(fo+)bar/, '\1baz' )
mystring.gsub( /(fo+)bar/, "\\1baz" )

除非需要插值,否则我使用单引号。当您需要插值时,稍后更改也会很麻烦:当您发现字符串中有一个#或一个\导致了您不想进行的转义时,您必须从double更改为single

默认为单引号的优点是,在采用此约定的代码库中,引号类型充当是否需要插值表达式的视觉提示。当编辑器或IDE以不同方式突出显示这两种字符串类型时,这种情况更为明显


我对多行字符串使用%{…}语法。

像许多程序员一样,我尽量做到具体可行。这意味着我试图通过使代码尽可能简单,使编译器尽可能少地工作。所以对于字符串,我使用最简单的方法来满足我对该字符串的需求

<<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.'

我看到了这两个方面的参数:

对于使用双引号的情况:

  • 倡导者总是使用双引号:

  • 如果您与引用一致,那么通过搜索“foobar”来搜索字符串foobar会更容易。然而,我不是。所以我搜索[''''']foobar['''']打开regexps
对于使用单双引号的某些组合:

  • 知道是否需要查找字符串插值
  • 可能会稍微快一点(尽管如此之小,不足以影响github样式指南)
单引号保留其中的字符。但双引号会对它们进行计算和分析。请参见以下示例:

"Welcome #{@user.name} to App!" 
结果:

欢迎Bhojendra加入应用程序

但是,

结果:

欢迎#{@user.name}加入应用程序

'Welcome #{@user.name} to App!'