Подтвердить что ты не робот

Когда будет использоваться рубиновый триггер?

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

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

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

4b9b3361

Ответ 1

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

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

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

first
second
third
fourth
fifth
sixth

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

third
fourth
fifth

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

Ответ 2

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

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

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 меньше - "<" чтобы закончить матч.

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

Выход

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

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

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

Ответ 3

Нечетное/четное выделение строк в HTML-таблицах со многими строками, по-видимому, является допустимым прецедентом.

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