суббота, 21 июля 2012 г.

Expanding Variables


ыва


irb(main):001:0> age = 18; puts "I am #{age} years old."
I am 18 years old.
irb(main):001:0> age = 18; str="I am " + age.to_s + " years old."
I am 18 years old.
irb(main):001:0> "I am 18 years old.".gsub(/\d+/) { 2 * $&.to_i }
I am 36 years old.


В первом примере просто вставляется переменная.
Во втором вставляется числовая переменная в строку, поэтому ее тоже делают строковой.
В последнем примере, наверное, дело обстоит так:
.gsub - это, как мы знаем, глобальная замена. В круглых скобках и в двух косых // написано что именно надо заменить, а именно - \d+. Где \d+ - это число 18. Почему именно такое написание, хз. Особенно интересно зачем там плюс. Единственное, что я поняла, что d - это число.
В фигурных скобках мы 2 умножаем на конструкцию вида $&.to_i, где $& - это указание на то, шо было в круглых скобках, т.е. на \d+, ну, и перевод в число, шоб из строковой сделать числовую.


Далее - Escaping Characters.



str = %q(Ruby said, "Don't you like Ruby"); str.gsub(/['"]/) { '\\'+$& }
Ruby said, \"Don\'t you like Ruby\"



В моем irb выдает другой результат. Странно. Там я еще пробанула поменять местами составляющие фигурных скобок. Меняется. Т. о. обратные слеши будут не перед 'и ", а после. В круглых скобках добавились еще и квадратные. Наверное, это потому, что у нас не одну штуку надо экранировать, а две. Т.е. когда пертурбации происходят с чем-то одним, то достаточно круглых скобок и слешей, а когда с несколькими составляющими, то надо их выделить еще в квадратную скобку.
Да, и здесь в фигурных скобках уже не умножение, а знак "+". Т.е. к тому, шо в круглых скобках надо прибавить, то что в фигурных. В этом примере к ' и " надо добавить "\\".
Не могу понять, почему добавляет по одному обратному слешу.
%q - тож не понимаю, почему %, ну, а q - quote, наверное, просто переменная. А, или для добавления цитаты %.



str = %q(Ruby said, "Don't you like Ruby"); str.gsub(/[^A-Z]/) { '\\'+$& }
R\u\b\y\ \s\a\i\d\,\ \"D\o\n\'\t\ \y\o\u\ \l\i\k\e\ R\u\b\y\"



В этом примере мне не очень понятно, почему нет слеша перед первой буквой. И почему нет слеша перед "D". Отута:  \"D\o\



str = %q(Ruby said, "Don't you like Ruby"); str.gsub(/\W/) { '\\'+$& }
Ruby\ said\,\ \"Don\'t\ you\ like\ Ruby\"



Здесь, наверное, W - Whitespace. Т.е. перед пустотой. Вот только почему он считает пустотой запятую и кавычки - одинарные и двойные. Может, это не пустота, а шо-та другое?)

Комментариев нет:

Отправить комментарий