2

IRB で誤って間違った構文を入力すると、元に戻って修正することはできず、新しいコマンド ラインが表示され続けます。

例えば:

1.9.3p194 :035> justin.find{|key,value|key=='phone_number
1.9.3p194 :036> justin.find{|key,value|key=='phone_number'}
1.9.3p194 :037>
1.9.3p194 :038>
1.9.3p194 :039>

例の :036 行に見られるように、構文のタイプミスを修正した後、メソッドは実行されません。

4

3 に答える 3

6

誰もが原因を指摘していますが、誰も質問に答えていません。

Control + Cを使用して、間違った行を終了します。

もちろん、実行しないとエラーが発生します。

新しい行に移動したら、上キーを使用して履歴を検索し、編集できます。

ところで、irb があなたの行が実行されていないことをまったく伝えていないのは奇妙です:

ご覧のとおり、irb はコマンドを終了するために特別な文字を要求します (おそらく、複数の括弧/引用符などがある場合、最初のものを指します:

irb(main):001:0> justin.find{|key,value|key=='phone_number
irb(main):002:1' ^C

   (Up Key)

irb(main):002:0> justin.find{|key,value|key=='phone_number'
irb(main):003:1>

Windows バージョン (ruby 1.9.3p327 (2012-11-10) [i386-mingw32] 仕事で得たもの :( ) しかし、Gentoo と Suse で同様のものを得たと確信しています

編集:

右の関連記事より。オプションとして渡すと、より良いプロンプトを取得できます

irb --prompt inf-ruby

">>" の代わりに "irb(main):001:0>" プロンプトを表示するにはどうすればよいですか?

于 2013-01-08T09:49:32.280 に答える
1

この回答で強調表示されているStackOverflowの構文は無視してください。誤解を招く恐れがあります。

この線

justin.find{|key,value|key=='phone_number

で始まる複数行の文字列の先頭が含まれますphone_number。あなたはまだそれを終えていないので—秒を入力することによって'—IRBはあなたが文字列を終えるのを丁寧に待ちます。入る

justin.find{|key,value|key=='phone_number'}

2行目では、開始した文字列が終了し、メソッド呼び出しまたはローカル変数phone_numberを入力し、その直後に、。で始まるさらに別の文字列の先頭を追加し}ます。この時点で、IRBが認識するコードは次のようになります。

justin.find{|key,value|key=="phone_number\njustin.find{|key,value|key=="phone_number'}

最後の文字列が終了していないため、まだ終了していないため、IRBは追加の入力を待機します。

後続の各

justin.find{|key,value|key=='phone_number'}

このループにとどまります。

Rubyはあなたに割り込んで、構文エラーがあることを知らせません。その理由は、IRBは回線ごとに動作し¹、技術的に回線を終了していないためです。実際、式の文字列には改行文字が含まれていますが、式を終了させるコードには改行文字はありません。

今、私はあなたの質問への答えが明白であることを願っています。IRBをループから外すには、次のように入力します。

'

¹式ごとの方が正確ですが、この回答のコンテキストでは行ごとで十分です。

于 2013-01-08T09:10:37.877 に答える
-1

行番号の後にアポストロフィがあります:

1.8.6 :200 > justin.find{|key,value|key=='phone_number
1.8.6 :201'> 

プロンプトを構成できるかどうかを確認して、ステートメントが続く場合に IRB が何を期待しているかの手がかりを得られるようにします。「if/unless」などのクラスとは何かも参照してください

于 2013-01-08T11:03:34.003 に答える