簡體   English   中英

Ruby觸發器什么時候有用?

[英]When would a Ruby flip-flop be useful?

我想通過教程我理解觸發器是如何工作的,但是這個例子只是為了教學而設計的。 任何人都可以舉例說明你實際使用或使用觸發器的方法嗎?

我正在尋找一個真實的應用程序,而不僅僅是另一個演示。 這個工具可以解決什么問題?

以前的鏈接是http://vision-media.ca/resources/ruby/ruby-flip-flop-or-range-operators ,但這些天似乎是垃圾郵件。

這是一個示例(取自rubycentral.com文章 ),您只打印文件中的某些行:

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

這假設您有一個包含以下內容的文件:

first
second
third
fourth
fifth
sixth

該程序只會打印出來:

third
fourth
fifth

我們的想法是,在左手事件發生之前,值才為真,然后在右手事件發生之前保持為真。 如果使用得當,這可能是一個很好的語法糖,但你需要小心,使事情可讀。

我想用一些具體的例子來補充詹姆斯的回答。 我已經使用此運算符根據正則表達式提取文本部分。

我正在編寫一個工具,涉及通過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個較少的“<”來結束比賽。

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

產量

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

我見過的大多數例子都涉及從基於正則表達式的文件或數組中提取數據塊。 想到的其他一些例子是從舊的平面文件系統(如編譯到文件的結構)和日志文件中提取git合並沖突,某些記錄。

基本上,任何時候你需要根據開始和結束數據而不僅僅是單個行的內容來提取部分。 它比一個簡單的正則表達式復雜一點,但比編寫解析器復雜一點。

具有許多行的HTML表中的奇數/偶數行突出顯示似乎是一個有效的用例。

在Rails中渲染表時,我曾經多次寫過一些不像上面那樣優雅的東西。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM