Почему не прервет меня из цикла ruby ​​-n? - PullRequest
0 голосов
/ 25 июня 2018

На этом веб-сайте написано

Ключ -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

1 Ответ

0 голосов
/ 25 июня 2018

Когда вы запускаете 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
$

Ctrl-D в Unix / OSX (Ctrl-Z в Windows) будет указывать конец файла, поэтому Ruby продолжит ввод второго. Таким образом, первые две строки являются сценарием. После того, как вы завершили этот файл, следующая строка (hello) служит входом для скрипта, и скрипт вернет его обратно. Следующая строка (world) продолжает ввод для сценария, но теперь счетчик строк $. показывает, что это вторая строка ввода, return выполняется, и сценарий заканчивается, как и должно быть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...