我认为我理解一个触发器是如何工作的,这要归功于一个教程,但是这个例子只是为了教学而设计的。任何人都可以举例说明你是如何使用或使用触发器的吗?
我正在寻找一个真实世界的应用程序,而不仅仅是另一个演示。这个工具可以解决什么问题?
以前的链接是http://vision-media.ca/resources/ruby/ruby-flip-flop-or-range-operators
,但这几天似乎是垃圾邮件。
答案 0 :(得分:20)
以下是一个示例(取自rubycentral.com article),您只打印文件中的某些行:
file = File.open("ordinal")
while file.gets
print if ($_ =~ /third/) .. ($_ =~ /fifth/)
end
这假设您有一个包含以下内容的文件:
first
second
third
fourth
fifth
sixth
该程序只会打印出来:
third
fourth
fifth
这个想法是,在左手事件发生之前,值为true,然后在右手事件发生之前保持为真。如果使用得当,这可能是一个很好的语法糖,但你需要小心,使事情可读。
答案 1 :(得分:8)
我想用一些具体的例子来补充詹姆斯的回答。我已经使用此运算符根据正则表达式提取文本部分。
我正在编写一个涉及通过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个更大的“&gt;”的正则表达式开始比赛,25减少“&lt;”结束比赛。
output.each { |line| puts line if line[/^>{25}/] .. line[/^<{25}/] }
<强>输出强>
>>>>>>>>>>>>>>>>>>>>>>>>>
Program Output
<<<<<<<<<<<<<<<<<<<<<<<<<
我见过的大多数示例都涉及从基于正则表达式的文件或数组中提取数据块。想到的其他一些例子是从旧的平面文件系统(如编译到文件的结构)和日志文件中提取git合并冲突,某些记录。
基本上,只要您需要根据开始和结束数据而不仅仅是单个行的内容来提取部分。它比一个简单的正则表达式复杂一点,但比编写解析器要复杂得多。
答案 2 :(得分:4)
包含许多行的HTML表中的奇数/偶数行突出显示似乎是一个有效的用例。
在Rails中渲染表格时,我写过一些不像上面那样优雅的东西。