2
我想大写每个单词的第一个字符,并保持其余的完整(所以它不同于Rails的titleize
,其中压倒了其余的)。第一行是测试,第三行是可行的,但我想知道为什么第二行不行?在Ruby中,为什么“omega-3(dHA)”.gsub(/ b([a-z])/,' 0'.upcase)不起作用?
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)"
要扩大一点,gsub方法的第二个参数是表达式''\ 0'.upcase'。这被评估并且它的* result *被传递给gsub。而在第三种情况下,gsub匹配被传递给块,并且在匹配中调用*然后* .upcase方法。 – 2011-04-13 21:12:45