Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么';不要打断我的ruby-n循环?_Ruby - Fatal编程技术网

为什么';不要打断我的ruby-n循环?

为什么';不要打断我的ruby-n循环?,ruby,Ruby,这个网站说 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 当您运行r

这个网站说

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

当您运行
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
$
$ruby-n
放置“ECHO:{$}”
如果$.=,则返回2.
你好
#=>埃科:你好
世界
#=>回声:世界
$

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

谢谢,您以非常清晰、逻辑和透彻的方式解释了它!