代码之家  ›  专栏  ›  技术社区  ›  kajaco

Ruby触发器什么时候有用?

  •  20
  • kajaco  · 技术社区  · 15 年前

    我想我理解一个触发器是如何工作的,多亏了一个教程,但这里的例子只是为了教学而设计的。有谁能举例说明你到底是如何使用触发器的?

    我正在寻找一个真实的应用程序,而不仅仅是另一个演示。这个工具能解决什么问题?

    以前的链接是 http://vision-media.ca/resources/ruby/ruby-flip-flop-or-range-operators ,但这几天似乎是垃圾邮件。

    3 回复  |  直到 8 年前
        1
  •  20
  •   the Tin Man    8 年前

    下面是一个例子(取自 rubycentral.com article )只打印文件中的某些行:

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

    这假设您有一个包含以下内容的文件:

    first
    second
    third
    fourth
    fifth
    sixth
    

    程序将只打印:

    third
    fourth
    fifth
    

    其思想是,在左侧事件发生之前,该值为真,然后在右侧事件发生之前保持为真。如果使用得当,这可能是一个很好的语法糖,但你需要小心,使事情可读。

        2
  •  8
  •   Adam Lukens    11 年前

    我想用一些具体的例子来补充詹姆斯的回答。我使用这个操作符来提取基于正则表达式的文本部分。

    我正在编写一个工具,它涉及到通过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个大于s“>”的正则表达式开始匹配,使用25个小于s“<”的正则表达式结束匹配。

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

    输出

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

    我看到的大多数例子都涉及到基于正则表达式从文件或数组中提取数据块。想到的其他一些例子还有:拉出git合并冲突、遗留平面文件系统中的某些记录(如写入文件的结构)和日志文件。

    基本上,任何时候你都需要根据开始和结束数据而不仅仅是单个行的内容来提取部分。它比简单的正则表达式复杂一点,但比编写语法分析器复杂一点。

        3
  •  4
  •   suranyami    13 年前

    在具有许多行的HTML表中,奇数/偶数行突出显示似乎是一个有效的用例。

    在过去,当我在rails中呈现表时,我写过几次不像上面那样优雅的东西。

    推荐文章