私は特別な変数$'
と方法MatchData#post_match
を比較しています。特別な変数は正常に動作しますが、メソッドpost_matchは失敗します。Ruby MatchData post_match予期しない動作
これは正常に動作します:
m = /b/.match("abc")
# => #<MatchData "b">
m.post_match
# => "c"
"abc".match(/b/)
# => #<MatchData "b">
$'
# => "c"
これは失敗します。
"abc".match(/b/)
# => #<MatchData "b">
MatchData.post_match
# => NoMethodError: undefined method `post_match' for MatchData
私は同じ出力'c'
を期待しています。なぜそれは失敗するのですか?私は何が欠けていますか?
クラス 'MatchData'で' post_match'を呼び出していますが、クラスメソッドではありません。あなたは 'MatchData'のインスタンスで呼び出す必要があります。 – katafrakt
ありがとう!だから、特別な変数$ 'が良いと思われます。 post_matchが優れている良い例は何でしょうか?マジックがSpecial Variablesで舞台裏で起こった場合、なぜMatchDataオブジェクトを作成するのですか? – Adam
マジックは良い開発者の最初の敵であり、一般的に悪です。 – mudasobwa