为什么不中断让我脱离ruby -n循环?

时间:2018-06-25 02:24:06

标签: ruby

此网站上说

  

-n开关的作用就像包装传递给Ruby的代码一样   以下:

while gets
  # code here
end

但是如果我输入ruby -n

并输入returnexitquitbreak,为什么他们不让我脱离上面的无限while循环?

但是end却以某种方式做到了:

$ ruby -n
return
break
exit
quit
end
-:5: syntax error, unexpected keyword_end, expecting end-of-input

1 个答案:

答案 0 :(得分:3)

运行ruby -n时,Ruby会从STDIN中获得两个不同的文件:脚本(因为您没有在参数中提供Ruby脚本名称,也没有在-e中提供Ruby表达式),和要处理的文件(由于-n)。因此,return不会仅仅因为当时脚本尚未运行而停止您的脚本。 return是脚本,您需要等到开始输入下一个文件才能使return正常工作。

尝试一下:

$ ruby -n
puts "ECHO: #{$_}"
return if $. == 2
<Ctrl-D>
hello
# => ECHO: hello
world
# => ECHO: world
$
Unix / OSX上的

Ctrl-D(Windows上的Ctrl-Z)将指示文件的末尾,因此Ruby将继续输入第二个文件。因此,前两行是脚本。结束该文件后,下一行(hello)将用作脚本的输入,脚本将回显该文件。下一行(world)继续脚本的输入,但是现在行计数器$.显示它是输入的第二行,return执行,脚本结束,因为它应该。