Ruby MatchData post_匹配意外行为
我将特殊变量Ruby MatchData post_匹配意外行为,ruby,regex,Ruby,Regex,我将特殊变量$”与方法MatchData\post\u match进行比较。特殊变量工作正常,但方法post_匹配失败 这很好: m = /b/.match("abc") # => #<MatchData "b"> m.post_match # => "c" "abc".match(/b/) # => #<MatchData "b"> $' # => "c" m=/b/.match(“abc”) # => # m、 赛后 #=>“c” “abc
$”
与方法MatchData\post\u match
进行比较。特殊变量工作正常,但方法post_匹配失败
这很好:
m = /b/.match("abc")
# => #<MatchData "b">
m.post_match
# => "c"
"abc".match(/b/)
# => #<MatchData "b">
$'
# => "c"
m=/b/.match(“abc”)
# => #
m、 赛后
#=>“c”
“abc”。匹配(/b/)
# => #
$'
#=>“c”
这失败了:
"abc".match(/b/)
# => #<MatchData "b">
MatchData.post_match
# => NoMethodError: undefined method `post_match' for MatchData
“abc”。匹配(/b/)
# => #
MatchData.post\u匹配
#=>NoMethodError:MatchData的未定义方法“post_match”
我希望得到相同的输出
'c'
。为什么会失败?我缺少什么?您应该调用matchdata实例上的post\u match
match_data = "abc".match(/b/)
# => #<MatchData "b">
match_data.post_match
# => "c"
match_data=“abc”。匹配(/b/)
# => #
匹配数据。后匹配
#=>“c”
带有
$
前缀的全局变量很难处理。它可以在任何地方更改,而且很难跟踪。此外,每次进行正则表达式匹配时,变量$”
都会不断变化。当您在嵌套循环中进行正则表达式匹配时,这可能会成为一个问题;无论何时在内循环中执行某些操作,都可能会打乱外循环中的最后一个匹配。反之亦然。或者,当您在进行另一场比赛后想要参考上一场比赛时,您会遇到麻烦
通过使用match data实例,您可以将其指定为局部变量,并在复杂情况下跟踪多个match data。您在类
MatchData
上调用post\u match
,但它不是类方法-您必须在MatchData
的实例上调用它。谢谢!因此,似乎特殊变量$'更好。什么是一个好的例子,赛后比赛是优越的?如果魔术发生在幕后的特殊变量上,为什么要创建MatchData对象呢?魔术是优秀开发人员的第一个敌人,通常是一个邪恶的东西。