首页 > 解决方案 > 为什么 break 不能让我摆脱 ruby​​ -n 循环?

问题描述

这个网站说

-n 开关的作用就像您传递给 Ruby 的代码被包装在以下内容中一样:

while gets
  # code here
end

但是如果我输入ruby -n

并输入returnor exitor quitor break,为什么他们不让我摆脱上面的无限 while 循环?

但不知何故end做到了:

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

标签: ruby

解决方案


当您运行 时ruby -n,Ruby 期望来自 STDIN 的两个不同文件:脚本(因为您没有在参数中提供 Ruby 脚本名称,也没有在 中提供 Ruby 表达式-e)和要处理的文件(由于-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执行,并且脚本结束,正如它应该的那样。


推荐阅读