私は about_regular_expressions.rb を調べていますが、ここで何が起こっているのか正確にはわかりません:
def test_variables_can_also_be_used_to_access_captures
assert_equal "Gray, James", "Name: Gray, James"[/(\w+), (\w+)/]
assert_equal "Gray", $1
assert_equal "James", $2
end
正規表現で括弧を使用すると、フードの下に 2 つの新しい変数 ($1 と $2) が作成されるように思えます。
これは正しいです?
しかし、私はこれをしました:
def test_variables_can_also_be_used_to_access_captures
assert_equal "Gray, James", "Name: Gray, James"[/(\w+), (\w+)/]
assert_equal "Smith, Bobert", "Name: Smith, Bobert"[/(\w+), (\w+)/]
assert_equal "Smith", $1
assert_equal "Bobert", $2
end
そして「スミス」と「ボバート」を捕獲。括弧付きの新しい正規表現が使用されるたびに、以前の値が上書きされただけだと思いますか?
次に、単語を 1 つだけキャプチャしようとすると、次のようになります。
def test_variables_can_also_be_used_to_access_captures
assert_equal "Gray, James", "Name: Gray, James"[/(\w+), (\w+)/]
assert_equal "Smith, Bobert", "Name: Smith, Bobert"[/(\w+), (\w+)/]
assert_equal "Smith", $1
assert_equal "Bobert", $2
assert_equal "Susan,", "Name: Susan, whatever"[/(\w+),/]
assert_equal "Susan", $1
assert_equal nil, $2
end
$2 がなくなりました... ("Bobert" はもうありません)
ボンネットの下で何が起こっているかについて誰かが光を当てることができますか? または、私を正しい方向に向けますか?