-2
>> p "hi"; puts p "hello"
"hi"
"hello"
hello
=> nil

"hi"出力から、と"hello"が two で出力されていることが明らかですp。次に下にputs印刷します。

hello
=> nil

しかし、問題は次のとおりですp

"hello" 
=> "hello" 

putsから左または右を受け取ったのは何pですか? それをより深く見るために、私は以下を試しました:

>> p "hi"; puts print "hello"
"hi"
hello
=> nil

上記を見て、私が理解したのは、そのものをp印刷したことです。以下の出力部分との混乱。

hello
=>nil 

の左側のどこにhello印刷されますか?戻り値で起動されたと考えると、出力は次のようになりますprint=> nilputsprintnil

hello

=>nil # the extra blank line is for `nil.to_s` .

しかし、実際の出力から、私はそれを結論付けることができません。印刷された値putsで起動されたと考えると、出力は次のようになりますprinthello

hello
=>nil # then where the output of print statement went out?

しかし、実際の出力から、私はそれを結論付けることができません。

Ubuntu 12.10 と Ruby 1.9.3 を使用しています。何が起こっているのかを理解するのを手伝ってくれる人はいますか?

4

1 に答える 1

0

あなたの例は次と同じです

p("hi")
puts(print("hello"))

出力に空の行が表示されない理由は、出力printに改行を追加しないためです。

printhellostdout に書き込み、nil を返し、(同じ行に) 書き込みnil.to_s(つまり、空の文字列) を配置し、その後に改行文字を付けます。puts("hello")

于 2013-02-16T09:11:21.063 に答える