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"