0

私はそれがリターンを常に単独で置くことを知っていnilました。

しかし、すでにその事実を知って、私はそれをいじり始めました。ここにあります:

>> puts

=> nil # Good, you are doing what I expected.

>> puts 15
15
=> nil # nil is for puts and 15 it printed,as it is assigned to do. perfect still.

>> puts a = 5 + 2
7
=> nil # still good.

puts次に、それがどれほど堅牢であるかを確認するために、もう少し実行します。

>> puts a= 5 + 2;b= 2+3
7
=> 5 #ahh! where is nil?

>> puts a= 5 + 2;b= 2+3;c= 4+8
7
=> 12 # again no nil. Another confusion created here that why 12 and 7 only, how 5 has been skipped?

どのようputs nilに値が抑制されましたか?

では、別の方法でテストしnilてみましょう。

>> x=puts a= 5 + 2;b= 2+3;c= 4+8
7
=> 12

>> puts x

=> nil # humm, nil is there. but why not nil => nil? Confusion here again goes up. whose nil is it?

putsRuby の世界での の実際の動作を教えてくれる人はいますか?

4

4 に答える 4

2

repl は、irb入力したステートメントを評価し、最後に評価されたステートメントの値を表示していると思います。

このことを考慮:

>> p = puts "hello"; 5
hello
 => 5 
>> p
 => nil 

putsまだ返さnilれていますが、repl は最後のステートメントの結果を表示しています。5

于 2013-02-15T16:37:32.370 に答える
2

これはプットとはあまり関係がありません。

セミコロンは複数の式を区切ります。irbこの場合、最後の式が評価されたもののみを表示します。

于 2013-02-15T16:37:57.787 に答える
1

問題は ではなくputs、複数のステートメントを含むコマンド (セミコロンで区切られている) でプロンプトが行うことです。

次の例を考えてみてください。

irb(main):001:0> "first";"second"
=> "second"
于 2013-02-15T16:40:54.140 に答える
1

putsその引数を呼び出します。to_sそれが機能する理由puts 1です。puts nilは と同じputs nil.to_sで、それはputs ""(IRB 出力の空白行に注意してください) と同じです。

残りは、新しい入力を待つ前に、最後に実行された行の結果を irb が出力するだけです。

于 2013-02-15T16:48:25.990 に答える