gsub
заменяет все, что совпало в регулярном выражении с результатом блока. так что да, в этом случае вы сопоставляете первую букву слов, а затем заменяете ее версией в верхнем регистре.
относительно немного странного синтаксиса внутри блока, это эквивалентно (и, возможно, легче понять):
def capitalize_words(string)
string.gsub(/\b\w/) {|x| x.upcase}
end
или даже пижон:
def capitalize_words(string)
string.gsub /\b\w/, &:upcase
end
в отношении регулярного выражения (любезно предоставлено книгой кирки), \b
соответствует границе слова и \w
любой «символ слова» (алфавитно-цифровые и подчеркивания). поэтому \b\w
соответствует первому символу слова.