Когда будет полезен Рубиновый триггер? - PullRequest
20 голосов
/ 10 июля 2009

Мне кажется, я понимаю, как работает триггер, благодаря учебнику, но пример здесь придуман только для обучения. Кто-нибудь может привести пример того, как вы на самом деле использовали или использовали бы триггер?

Я ищу реальное приложение, а не просто еще одну демонстрацию. Какие проблемы может решить этот инструмент?

Раньше ссылка была http://vision-media.ca/resources/ruby/ruby-flip-flop-or-range-operators, но в наши дни это спам.

Ответы [ 3 ]

20 голосов
/ 10 июля 2009

Вот пример (взятый из статьи rubycentral.com ), где вы печатаете только определенные строки из файла:

file = File.open("ordinal")
while file.gets
    print if ($_ =~ /third/) .. ($_ =~ /fifth/)
end

Предполагается, что у вас есть файл со следующим содержимым:

first
second
third
fourth
fifth
sixth

Программа будет распечатывать только:

third
fourth
fifth

Идея состоит в том, что это значение истинно до тех пор, пока не произойдет левостороннее событие, а затем остается истинным до тех пор, пока не произойдет правое событие. При правильном использовании это может быть хорошим кусочком синтаксического сахара, но вы должны быть осторожны, чтобы все было читабельно.

8 голосов
/ 31 января 2013

Я бы хотел добавить к ответу Джеймса несколько конкретных примеров. Я использовал этот оператор для извлечения фрагментов текста на основе регулярных выражений.

Я писал инструмент для запуска команд на удаленном сервере через Net :: SSH. Этот конкретный сервер имел досадную привычку печатать MOTD независимо от того, был ли сеанс сеансом входа в систему или нет. Это привело к возвращению большого количества мусора, когда я запустил команду и получил вывод. Поскольку у меня не было большого влияния в настройке сервера, я создал небольшой скрипт, который распечатывал разделитель, запускал программу и затем печатал другой разделитель. Вывод выглядел примерно так.

Welcome to Server X!

+----------------------------------------------------------------------+
| Use of this server is restricted to authorized users only. User      |
| activity may be monitored and disclosed to law enforcement personnel |
| if any possible criminal activity is detected.                       |
+----------------------------------------------------------------------+

----------------------------------------------
    Setting up environment for user Adam. 
----------------------------------------------

>>>>>>>>>>>>>>>>>>>>>>>>>
Program Output
<<<<<<<<<<<<<<<<<<<<<<<<<

Оператор триггера был полезным сочетанием клавиш для извлечения только части кода с нужным мне выводом. Я использовал регулярное выражение, которое соответствовало 25 «больше», чем «>», чтобы начать матч, и 25 меньше, чем «<», чтобы закончить матч. </p>

output.each { |line| puts line if line[/^>{25}/] .. line[/^<{25}/] }

выход

>>>>>>>>>>>>>>>>>>>>>>>>>
Program Output
<<<<<<<<<<<<<<<<<<<<<<<<<

Большинство примеров, которые я видел, были связаны с извлечением фрагментов данных из файла или массивов на основе регулярных выражений. Некоторые другие примеры, которые приходят на ум, - это удаление конфликтов git merge, некоторые записи из устаревших плоских файловых систем (например, структуры, записанные в файл) и файлы журналов.

По сути, в любое время вам нужно будет извлекать разделы, основанные на начальных и конечных данных, а не только на содержимом отдельной строки. Это немного сложнее, чем простое регулярное выражение, но менее сложно, чем написание парсера.

4 голосов
/ 18 июля 2011

Нечетное / четное выделение строк в таблицах HTML с большим количеством строк может показаться допустимым вариантом использования.

Я писал что-то не так элегантно, как выше, несколько раз в прошлом при рендеринге таблиц в Rails.

...