1

-p==> -nのようにループを想定しますが、sedのように行を出力します。

今、私はそれがどのように機能するかを見るために以下を試しました:

@ubuntu:~$ ruby -p
hi #<~~ pressed on ENTER
   # nothing printed baack 
\t
-:5: syntax error, unexpected $undefined, expecting $end
@ubuntu:~$

上記で「hi」と入力した後、「ENTER」を押すと、上記のように空白行が表示されます。hiとして出力されると思いました。

今、私はそれを少し異なる方法で試しました:

@ubuntu:~$ ruby -p -e '"hi"'
hi  #<~~ pressed on ENTER
hi
ttt #<~~ pressed on ENTER
ttt
\t  #<~~ pressed on ENTER
\t
EOF #<~~ pressed on ENTER
EOF

しかし、ここでは-p期待どおりに機能したようです。しかし、Loop無限に陥りLoopます。私はこのループを終わらせようとEOFしましたが、それは起こりませんでした。むしろ、それも印刷されました。

なぜこれらの違いを理解するのを誰かが助けてくれますか?

4

2 に答える 2

1

-pしましょう:

- Read a line from input
- Pass the input to the code
- If the code executes successfully, print the input

コマンドラインでファイル名またはを指定しない場合、-e何も実行せずに標準入力を消費するだけです。-pコードが提供されていないため、印刷されません。

を入力するだけで、行を入力するたびに文字列-pe '"hi"'が生成され(ただし、メモリ内にありますが出力はありません)、示されているように出力されます。hi-p

EOFあなたが置いたのはEOFインジケーターではありません。文字列"EOF"です。EOF信号をrubyに送信する場合は、を押しCtrl+ZてEnterキーを押します。

于 2013-02-13T20:35:06.453 に答える
0

プログラムがないと、インタプリタはEOFまで標準入力を読み取るため、最初の実験は失敗しました。そのため、最初に標準入力からプログラムを入力し、次に^ DまたはコンソールにあるEOFを入力する必要があるという混乱した状況にあります。その後、プログラムが起動し、標準入力を再度読み取って、固定ループを実装します。

2番目のケースでは、少なくともデュアル標準入力スナーフを回避します。そして、それは正確に無限ループではありません。EOFを入力すると終了します。

于 2013-02-13T19:53:16.410 に答える