ruby - 为什么 break 不能让我摆脱 ruby -n 循环?
问题描述
这个网站说
-n 开关的作用就像您传递给 Ruby 的代码被包装在以下内容中一样:
while gets # code here end
但是如果我输入ruby -n
并输入return
or exit
or quit
or break
,为什么他们不让我摆脱上面的无限 while 循环?
但不知何故end
做到了:
$ ruby -n
return
break
exit
quit
end
-:5: syntax error, unexpected keyword_end, expecting end-of-input
解决方案
当您运行 时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
执行,并且脚本结束,正如它应该的那样。
推荐阅读
- swiftui - 防止点击时突出显示 VStack 中的 NavigationLink
- scala - IntelliJ Scala maven构建jar不生成类文件
- python - 无法使用 Flask-SocketIO 向房间发送消息
- blogger - 如何编辑博客 HTML 以在移动主题中显示默认搜索框?
- javascript - Popper popovers 没有正确遵循旋转的 popper 参考
- javascript - d3 v4 地图意外变空
- git - 我无法在 Digital Ocean 上进行远程部署
- java - 为什么数据文件中的count值不递增?
- geolocation - Json 文件未加载到 folium 地图上
- matlab - 取矩阵列的平均值