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

tin*_*yaa 3 ruby

我目前正在学习Ruby,我似乎无法将其包裹起来if /start/../end......帮助?

while gets
  print if /start/../end/
end
Run Code Online (Sandbox Code Playgroud)

MeM*_*k99 5

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

/start/   # a regular expression literal
Run Code Online (Sandbox Code Playgroud)

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

"To start means to begin." =~ /start/  #=> true, because 'start' is in the string. 
Run Code Online (Sandbox Code Playgroud)

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

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

因此,使用上面的示例:

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