Заменяет все, что находится между обратными галочками в line
, в результате оценки содержащегося в нем рубинового кода.
>> line = "one plus two equals `1+2`"
>> line.gsub!(/`(.*?)`/) { eval($1) }
>> p line
=> "one plus two equals 3"
.*
соответствует нулю или нескольким символам, ?
делает его нежадным (т. Е. Оно будет принимать самое короткое совпадение, а не самое длинное).
$1
- строка, которая соответствует материалу между ()
. В приведенном выше примере $1
было бы установлено на "1+2"
. eval
оценивает строку как код ruby.