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

从输出中可以很清楚地看到,"hi"并且"hello"已经被两个p. 然后puts打印在下面;

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已经用prints 打印值触发了,hello那么输出应该是

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没有在其输出中附加换行符。

print写入hello标准输出,返回 nil,然后将写入(在同一行)nil.to_s(即空字符串)后跟换行符,因此您得到的输出与您编写的完全相同puts("hello")

于 2013-02-16T09:11:21.063 回答