Ruby中的字符串编写示例
优先使用字符串插值来代替字符串串联。
#bad email_with_name=user.name+'<'+user.email+'>' #good email_with_name="#{user.name}<#{user.email}>" #good email_with_name=format('%s<%s>',user.name,user.email)
Considerpaddingstringinterpolationcodewithspace.Itmoreclearlysetsthe
codeapartfromthestring.考虑使用空格填充字符串插值。它更明确了除字符串的插值来源。
"#{user.last_name},#{user.first_name}"
Considerpaddingstringinterpolationcodewithspace.Itmoreclearlysetsthe
codeapartfromthestring.
考虑替字符串插值留白。這使插值在字符串里看起來更清楚。
"#{user.last_name},#{user.first_name}"
采用一致的字符串字面量引用风格。这里有在社区里面受欢迎的两种风格,它们都被认为非常好-
默认使用单引号(选项A)以及双引号风格(选项B)。
(OptionA)当你不需要字符串插值或者例如\t,\n,'这样的特殊符号的
时候优先使用单引号引用。
#bad name="Bozhidar" #good name='Bozhidar'
(OptionB)Preferdouble-quotesunlessyourstringliteral
contains"orescapecharactersyouwanttosuppress.
除非你的字符串字面量包含"或者你需要抑制转义字符(escapecharacters)
优先使用双引号引用。
#bad name='Bozhidar' #good name="Bozhidar"
第二种风格可以说在Ruby社区更受欢迎些。该指南的字符串字面量,无论如何,
与第一种风格对齐。
不要使用?x符号字面量语法。从Ruby1.9开始基本上它是多余的,?x将会被解释为x(只包括一个字符的字符串)。
#bad char=?c #good char='c'
别忘了使用{}来围绕被插入字符串的实例与全局变量。
classPerson attr_reader:first_name,:last_name definitialize(first_name,last_name) @first_name=first_name @last_name=last_name end #bad-valid,butawkward defto_s "#@first_name#@last_name" end #good defto_s "#{@first_name}#{@last_name}" end end $global=0 #bad puts"$global=#$global" #good puts"$global=#{$global}"
在对象插值的时候不要使用Object#to_s,它将会被自动调用。
#bad message="Thisisthe#{result.to_s}." #good message="Thisisthe#{result}."
操作较大的字符串时,避免使用String#+做为替代使用String#<<。就地级联字符串块总是比String#+更快,它创建了多个字符串对象。
#goodandalsofast html='' html<<'<h1>Pagetitle</h1>' paragraphs.eachdo|paragraph| html<<"<p>#{paragraph}</p>" end
Whenusingheredocsformulti-linestringskeepinmindthefact
thattheypreserveleadingwhitespace.It'sagoodpracticeto
employsomemarginbasedonwhichtotrimtheexcessivewhitespace.
heredocs中的多行文字会保留前缀空白。因此做好如何缩进的规划。这是一个很好的
做法,采用一定的边幅在此基础上削减过多的空白。
code=<<-END.gsub(/^\s+\|/,'') |deftest |some_method |other_method |end END #=>"deftest\nsome_method\nother_method\nend\n"