此网站上说
-n开关的作用就像包装传递给Ruby的代码一样 以下:
while gets # code here end
但是如果我输入ruby -n
并输入return
或exit
或quit
或break
,为什么他们不让我脱离上面的无限while循环?
但是end
却以某种方式做到了:
$ ruby -n
return
break
exit
quit
end
-:5: syntax error, unexpected keyword_end, expecting end-of-input
答案 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
执行,脚本结束,因为它应该。