2013-02-16 50 views
-2
>> p "hi"; puts p "hello" 
"hi" 
"hello" 
hello 
=> nil 

從輸出IRB Ruby的輸出機制,它是很清楚,"hi""hello"是由兩個p打印。 然後puts印在下面;混亂與「P」,「打印」和「看跌期權」

hello 
=> nil 

但問題是:作爲p回報

"hello" 
=> "hello" 

什麼puts收到了左邊的一個或p的權利?現在看那個更深入地我嘗試以下:

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

綜觀上述,我的理解是,p印刷的一個。與下面的輸出部分混淆。

hello 
=>nil 

hello是通過印刷然後print其中=> nil左側?如果我認爲puts已經被解僱與print返回值nil則輸出應是

hello 

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

但是從實際輸出我不能斷定。如果我認爲puts已經被解僱與print印出來的值hello則輸出應是

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

但是從實際輸出我不能斷定。

我使用的是Ubuntu 12.10和Ruby 1.9.3。任何人都可以幫助我理解發生了什麼?

+3

如果你的谷歌「紅寶石p打印」,你會得到一些StackOverflow結果,很好地解釋了每種方法的作用。而FYI,'p把print foo'和'p(puts(print(foo)))''相同。 – 2013-02-16 09:11:44

+0

@AmitKumarGupta Humm ... Amit ji'p把print foo放在p(puts(print(foo)))'這是一個很好的信息。 – 2013-02-16 09:31:09

+0

這似乎是它的重複或延續http://stackoverflow.com/questions/14899116/how-puts-statement-works-in-ruby – 2013-02-16 11:17:51

回答

0

你舉的例子是一樣的

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

,你最終不會在輸出一個空行是print不追加換行符到其輸出的原因。

print寫道:hello到標準輸出,返回零,然後是換行符把寫入(在同一行)nil.to_s(即空字符串),所以你得到完全相同的輸出,如果你寫了puts("hello")

+0

沒有區別。輸出的東西對我來說很好 – 2013-02-16 09:39:00