我想将每个单词的第一个字符大写,并保留其余的字符不变(因此它不同于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)"

最佳答案

'\0'.upcase调用字符串的upcase方法在ruby中是可选的。当然它什么也不做,所以第二行就是'\0'

10-07 21:16