Пожалуйста, объясните этот код от сторожа - PullRequest
1 голос
/ 25 апреля 2011

Я учусь использовать watchr, гем ruby, который просматривает файлы и запускает что-то, если они меняются

watch( 'test/test_.*\.rb' )  {|md| system("ruby #{md[0]}") }
watch( 'lib/(.*)\.rb' )      {|md| system("ruby test/test_#{md[1]}.rb") }

В частности, я не понимаю, что такое md[0] и md[1].Я знаю, что 'test/tests_.*\.rb' - это регулярное выражение, которое извлекает список файлов.Я также знаю, что |md| представляет имена файлов, которые соответствуют регулярному выражению.Но я не уверен, что md[0] и md[1] будут указывать на

Ответы [ 3 ]

1 голос
/ 25 апреля 2011

Я подозреваю, что md - это экземпляр MatchData, где [0] это весь сопоставленный текст, а [1] - первое захваченное подвыражение), в данном случае имя файла внутрикаталог lib, без расширения.

0 голосов
/ 26 апреля 2011

ответ зетика правильный;md является экземпляром класса MatchData Руди, который является результатом применения регулярного выражения к измененному файлу (см. String#match).

Соответствующая строка из исходного кода Watchr находится по адресу:https://github.com/mynyml/watchr/blob/17fa9bf80998483f9cf69a934bbcb726a0c389fa/lib/watchr/script.rb#L204

0 голосов
/ 25 апреля 2011

Оператор регулярного выражения Ruby (= ~) возвращает объект, который отвечает: []. Значения 0 и 1 относятся к соответствующей строке и первой группе (часть в скобках).

Так, например, если тестируемые строки были:

"test/test_sample.rb"
"lib/sample.rb"

Тогда первое выражение (/test/test_.*.rb/) будет соответствовать «test / test_sample.rb», а второе выражение (/lib/(.*).rb/) будет соответствовать «sample». Вы можете увидеть это в консоли:

> /test\/test_.*\.rb/ =~ "test/test_sample.rb"
# => 0
> $~[0]
# => "test/test_sample.rb"
> /lib\/(.*)\.rb/ =~ "lib/sample.rb"
# => 0
> $~[0]
# => "lib/sample.rb"
> $~[1]
# => "sample"

md означает MatchData, который является классом объекта, который Ruby использует для возврата результата соответствия регулярному выражению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...