>> 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
已使用print
的打印值hello
触发,则输出应为
hello
=>nil # then where the output of print statement went out?
但从实际输出中我无法得出结论。
我使用的是Ubuntu 12.10和Ruby 1.9.3。谁能帮助我了解发生了什么?
答案 0 :(得分:0)
您的示例与
相同p("hi")
puts(print("hello"))
您在输出中没有以空行结尾的原因是print
不会在其输出中附加换行符。
print
将hello
写入stdout,返回nil,然后将写入(在同一行)nil.to_s
(即空字符串)后跟换行字符,这样就得到了完全相同的输出,就像你写了puts("hello")