Dziwne podstawianie ukośnika w Ruby
Nie rozumiem tego kodu Ruby:
>> puts '\\ <- single backslash'
# \ <- single backslash
>> puts '\\ <- 2x a, because 2 backslashes get replaced'.sub(/\\/, 'aa')
# aa <- 2x a, because two backslashes get replaced
jak dotąd, wszystko zgodnie z oczekiwaniami. ale jeśli szukamy 1 z/\\/
i zastąp 2 kodowanym przez'\\\\'
, dlaczego to otrzymujemy:
>> puts '\\ <- only 1 ... replace 1 with 2'.sub(/\\/, '\\\\')
# \ <- only 1 backslash, even though we replace 1 with 2
a następnie, gdy kodujemy 3 za pomocą'\\\\\\'
, dostajemy tylko 2:
>> puts '\\ <- only 2 ... 1 with 3'.sub(/\\/, '\\\\\\')
# \\ <- 2 backslashes, even though we replace 1 with 3
każdy, kto jest w stanie zrozumieć, dlaczego ukośnik zostaje połknięty w ciągu zastępującym? dzieje się to w 1.8 i 1.9.