Ruby String.methods.grep (/instance/){p $1} 为什么全部输出 nil

anleb · 2012年07月03日 · 最后由 adventurelw 回复于 2012年07月03日 · 3278 次阅读

String.methods.grep(/instance/){p $1} 为什么全部输出 nil

看 grep 的用法。

$1 是指在当前 context 下的最后一个匹配。 你应该写String.methods.grep(/instance/){ |v| p v } 参见http://ruby-doc.org/core-1.9.3/Enumerable.html#method-i-grep

#3 楼 @chentianwen 。。。。你也看看书,1 是第一个匹配

...我指的是你把 $1 放在一个 block 里,那里跟你用 grep 是不同的 context,$1 是不可能获取到当前匹配的

建议你读一下源代码,看看别人是怎么用 block 的,先理解好基础先吧

#7 楼 @Anleb #6 楼 @chentianwen “1”.methods.grep(/instance_(.*)_set){p $1} 你研究下我的这个代码你就明白我为什么这么问了

答案我知道了,$1 对应的是匹配成功的第一个括号的值

“1”.methods.grep(/instance_(.)set){p $1} 代码有误,应为 “1”.methods.grep(/instance(.)set/){p $1} 区别在于 String.methods.grep(/instance/) 结果是多少,而 “1”.methods.grep(/instance(.*)_set) 只有一个。这应该和 $1 的具体实现有关吧? #9 楼 @Anleb 哪为什么 String... 的第一个输出也为 nil ?

#10 楼 @leekelby 没有括号就是 nil

括号是正解。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册