Ruby on rails 在一些Ruby代码I';我发现
我目前正在阅读Rails的敏捷Web开发,第3版。在第672页,我遇到了这种方法:Ruby on rails 在一些Ruby代码I';我发现,ruby-on-rails,ruby,Ruby On Rails,Ruby,我目前正在阅读Rails的敏捷Web开发,第3版。在第672页,我遇到了这种方法: def capitalize_words(string) string.gsub(/\b\w/) { $&.upcase } end 块中的代码在做什么?我从未见过这种语法。它是否类似于array.map(&:some\u方法)语法 它是输入的标题框。在块内,$&是一个内置项,表示当前匹配(\b\w即每个单词的第一个字母),然后将其大写。它是输入的标题。在块内,$&是一个内置项,表示当前匹配(\b\
def capitalize_words(string)
string.gsub(/\b\w/) { $&.upcase }
end
块中的代码在做什么?我从未见过这种语法。它是否类似于
array.map(&:some\u方法)
语法 它是输入的标题框。在块内,$&是一个内置项,表示当前匹配(\b\w即每个单词的第一个字母),然后将其大写。它是输入的标题。在块内,$&是一个内置项,表示当前匹配(\b\w即每个单词的第一个字母),然后将其大写。gsub
用块的结果替换正则表达式中匹配的所有内容。所以,是的,在这种情况下,你要匹配单词的第一个字母,然后用大写版本替换它
至于块内的稍微奇怪的语法,这是等效的(也许更容易理解):
或者更圆滑:
def capitalize_words(string)
string.gsub /\b\w/, &:upcase
end
至于正则表达式(由鹤嘴锄手册提供),
\b
匹配单词边界,并且\w
任何“单词字符”(字母数字和下划线)。因此\b\w
匹配单词的第一个字符。gsub
用块的结果替换正则表达式中匹配的所有内容。所以,是的,在这种情况下,你要匹配单词的第一个字母,然后用大写版本替换它
至于块内的稍微奇怪的语法,这是等效的(也许更容易理解):
或者更圆滑:
def capitalize_words(string)
string.gsub /\b\w/, &:upcase
end
至于正则表达式(由鹤嘴锄手册提供),
\b
匹配单词边界,并且\w
任何“单词字符”(字母数字和下划线)。所以\b\w
匹配单词的第一个字符。您已经提到了我不喜欢Ruby的几个方面之一:)
魔法变量$&包含上一次成功模式匹配的匹配字符串。在本例中,它将是每个单词的第一个字符
这在String.gsub的RDoc中提到:
你提到了我不喜欢Ruby的几件事之一:) 魔法变量$&包含上一次成功模式匹配的匹配字符串。在本例中,它将是每个单词的第一个字符 这在String.gsub的RDoc中提到:
正如我所说,我不喜欢Ruby的几件事之一。Wish Matz在Perl中留下了magic变量。Peter的答案(如下)显示了两个更可读的版本,它们都没有使用全局变量。(或者,更准确地说,该全局函数的任何使用都与
String#gsub
将变量传递到块的方式有关——它如何传递变量取决于Ruby实现。)正如我所说,Ruby有几点我不喜欢。Wish Matz在Perl中留下了magic变量。Peter的答案(如下)显示了两个更可读的版本,它们都没有使用全局变量。(或者更准确地说,该全局函数的任何使用都与String#gsub
将变量传递到块的方式有关——如何传递变量取决于Ruby实现。)