在Ruby中,为什么"omega-3(dHA)".gsub(/\b([az])/,'\ 0'.upcase)不起作用?

nop*_*ole 2 ruby regex

我希望将每个单词的第一个字符大写并保留其余单词(因此它与Rails的不同titleize,后者将其余部分缩写).第一行是测试,第三行有效,但我想知道为什么第二行不起作用?

ruby-1.9.2-p180 :026 > "omega-3 (dHA)".gsub(/\b([a-z])/, '#\0#')
 => "#o#mega-3 (#d#HA)" 

ruby-1.9.2-p180 :027 > "omega-3 (dHA)".gsub(/\b([a-z])/, '\0'.upcase)
 => "omega-3 (dHA)" 

ruby-1.9.2-p180 :028 > "omega-3 (dHA)".gsub(/\b([a-z])/) {|s| s.upcase}
 => "Omega-3 (DHA)" 
Run Code Online (Sandbox Code Playgroud)

小智 7

'\0'.upcase调用upcase字符串的方法'\0'- 用于调用的parens在Ruby中是可选的.这当然什么都不做,所以第二行就是.gsub(/.../, '\0')

  • 为了扩展一点,gsub方法的第二个参数是表达式''\ 0'.upcase`.评估它,然后将它的*result*传递给gsub.而在第三种情况下,gsub匹配被传递给块,然后*然后*匹配时调用`.upcase`方法. (3认同)