我正在阅读《Beginning Ruby From Novice To Professional 2nd Edition》,目前在第 49 页,我们正在学习 RegEx 基础知识。书中的每个正则表达式片段后面都有一个尚未解释的代码。
{ |x| puts x }
在上下文中:
"This is a test".scan(/[a-m]/) { |x| puts x }
有人可以告诉我吗?
最佳答案
像scan
这样的方法是一个迭代器;在这种情况下,每次匹配传递的正则表达式时,scan
都会执行程序员指定的操作。在 Ruby 中,“某物”被表示为一个 block ,由 { code }
或 do code end
表示(具有不同的优先级),其中作为特殊参数传递给该方法。 block 可以以参数(和局部变量)列表开始,即 |x|
部分; scan
使用它匹配的字符串调用 block ,该字符串绑定(bind)到 block 内的x
。 (此语法来自 Smalltalk。)
因此,在这种情况下,scan
将在每次 /[a-m]/
匹配时调用其 block 参数,这意味着 之间字符串中的每个字符a
和 m
。
关于ruby - 该 Ruby/RegEx 代码有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6674231/