3

我目前正在学习 Ruby,但我似乎无法理解if /start/../end... 帮助?

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

2 回答 2

5

由于您提到您是 Ruby 新手,因此首先值得注意的是,您正在处理示例中的正则表达式 (regex) - 任何在两个正斜杠之间分隔的内容:

/start/   # a regular expression literal

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

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

双点表示法是触发器运算符,这是一个有争议的结构,可能继承自 Perl,通常不推荐使用,因为它会导致混淆。

这意味着以下内容:它将集体评估为假,直到左侧操作数为真。在这一点上,它将集体评估为真。然而,它只会在右手操作数评估为真之前保持为真 - 此时它将再次集体评估为假。

因此,使用上面的示例:

while gets
 print if /start/../end/
end
  1. 在输入'start'之前,整个表达式为假,不打印任何内容。
  2. 当输入 'start' 时,整个表达式为真,因此在此点之后输入的所有内容也将被打印出来。(尽管不是“开始”)
  3. 一旦输入 'end',整个表达式的计算结果为 false,并且从那时起不会打印任何内容。
于 2012-12-17T13:51:46.897 回答
3

它被称为触发器运算符。您可以在“ Ruby 触发器运算符”中阅读更多内容。

于 2012-12-17T11:33:53.507 回答