这个Ruby/RegEx代码做什么?
我正在经历从新手开始的Ruby到专业的第二版,目前在第49页,我们正在学习RegEx的基础知识。书中的每一个正则表达式片段都有一个未解释的代码这个Ruby/RegEx代码做什么?,ruby,regex,Ruby,Regex,我正在经历从新手开始的Ruby到专业的第二版,目前在第49页,我们正在学习RegEx的基础知识。书中的每一个正则表达式片段都有一个未解释的代码 { |x| puts x } 在这方面: "This is a test".scan(/[a-m]/) { |x| puts x } 有人能给我一些提示吗?它打印a和m之间字符串中的所有字母: |x | puts x是一个annonymouse函数(据我所知,在ruby中是“块”,在其他语言中是lambda),用于打印其参数。 有关这方面的更多信息,
{ |x| puts x }
在这方面:
"This is a test".scan(/[a-m]/) { |x| puts x }
有人能给我一些提示吗?它打印
a
和m
之间字符串中的所有字母:
|x | puts x
是一个annonymouse函数(据我所知,在ruby中是“块”,在其他语言中是lambda),用于打印其参数。有关这方面的更多信息,请参见:
{| x | put x}
定义了一个新块,该块使用名为x
的单个参数。调用块时,它将其参数x
传递给put
写同样东西的另一种方法是:
"This is a test".scan(/[a-m]/) do |x|
puts x
end
每次正则表达式与字符串中的内容匹配时,scan
函数都会调用该块,因此每次匹配都会被打印出来
此处有有关块的更多信息:
像
scan
这样的方法是迭代器;在这种情况下,每次匹配传递的正则表达式时,scan
执行程序员指定的操作。在Ruby中,“something”表示为一个块,由{code}
或do code end
表示(具有不同的优先级),它作为一个特殊参数传递给方法。块可以从参数列表(和局部变量)开始,这是|x |
部分scan
使用匹配的字符串调用块,该字符串绑定到块内的x
。(此语法来自Smalltalk。)
因此,在这种情况下,
scan
将在每次/[a-m]/
匹配时调用其块参数,这意味着在a
和m
之间的字符串中的每个字符上,在您的书的示例上下文中,它包含在每个表达式之后,因为它只是意味着“打印每个匹配。”
它是一个,为正则表达式的每个匹配项运行
{}
创建代码块
|x |
为代码块创建参数
put
打印一个字符串,x
是它打印的字符串
正则表达式匹配字符类[a-m]
中的任何单个字符。因此,有五种不同的匹配,并打印出来:
h
i
i
a
e
输出是
h
i
i
a
e
字符串“This is a test”(这是一个测试)的每个字符都会根据正则表达式
[a-m]
进行检查,正则表达式的意思是“范围a..m
中只有一个字符”,并打印在自己的行上(通过puts
)如果匹配。第一个字符T
不匹配,第二个h
匹配,等等。最后一个匹配的是“test”中的e
。我想他在问什么{x |放x}
是的。我不知道Ruby,但我只能假设它打印出正则表达式。@Switz-我刚开始,花了很长时间才弄清楚它在Ruby中是如何调用的,并找到了一些相关的引用。@Kobi你应该编辑你的答案,说“它打印给定字符串中a和m之间的所有字母或类似的内容。”。阅读当前答案的一种方法是打印abcdefghijklm
。只是说“:-)谢谢geekosaur,点击这里!我还得再读几遍。