这个Ruby代码如何工作 - 如果-stmt有范围?

时间:2012-12-17 11:27:06

标签: ruby

我目前正在学习Ruby,我似乎无法总结if /start/../end做什么......帮助?

while gets
  print if /start/../end/
end

2 个答案:

答案 0 :(得分:5)

既然你提到你是Ruby的新手,那么首先要注意你在处理示例中的正则表达式(正则表达式) - 在两个正斜杠之间划分的任何东西:

/start/   # a regular expression literal

正则表达式是匹配较大字符串中某些字母组合的强大方法。

"To start means to begin." =~ /start/  #=> true, because 'start' is in the string. 

双点表示法是触发器操作符,可能是从Perl继承的有争议的构造,通常不建议使用,因为它可能导致混淆。

表示以下内容: 在左手操作数为真之前,它将统一评估为false。在这一点上,它将集体评估为真。然而,只有在右手操作数评估为真之前它才会保持为真 - 此时它将再次集体评估为假。

因此使用上面的例子:

while gets
 print if /start/../end/
end
  1. 在输入“start”之前,整个表达式为false,并且不打印任何内容。
  2. 当输入'start'时,整个表达式为真,因此此点之后的所有输入也将被打印出来。 (尽管不是'开始')
  3. 一旦输入'end',整个表达式的计算结果为false,并且打印出该点之外的任何内容。

答案 1 :(得分:3)

它被称为触发器操作符。您可以在“Ruby flip-flop operator”阅读更多内容。