print和puts有什么区别?
例如,在我写的这行代码中, print
和puts
产生不同的结果。
1.upto(1000).each { |i| print i if i % 2 == 0 }
如果没有一个参数,那么puts
将在每个参数的末尾添加一个新行。
print
不会添加新行。
例如:
puts [[1,2,3], [4,5,nil]]
会返回:
1 2 3 4 五
而print [[1,2,3], [4,5,nil]]
会返回:
[[1,2,3],[4,5,nil]]
请注意puts如何不输出nil值,而print是这样做的。
一个很大的区别是如果你正在显示数组。 尤其是那些与无。 例如:
print [nil, 1, 2]
给
[nil, 1, 2]
但
puts [nil, 1, 2]
给
1 2
请注意,不出现零项(只是一个空白行),并在不同的行上的每个项目。
print
输出每个参数,其次是$,
,到$stdout
,接下来是$\
。 它相当于args.join($,) + $\
puts
$,
和$\
为“\ n”,然后做与print
一样的东西。 关键的区别在于每个参数都是一个新的行。
您可以require 'english'
使用用户友好名称访问这些全局variables。
API文档给出了一些很好的提示:
print() → nil
print(obj, ...) → nil
将给定的对象写入ios 。 该stream必须打开才能写入。 如果输出字段分隔符(
$,
)不为零,则会将其插入到每个对象之间。 如果输出logging分隔符($\
)不为零,则会将其附加到输出。 如果没有参数,打印$_
。 不是string的对象将通过调用它们的to_s
方法进行转换。 没有参数的话,打印variables$_
的内容。 返回nil。…
puts(obj, ...) → nil
将给定的对象写入ios,就像
IO#print
。 在没有以换行符结束的任何之后写入一个logging分隔符(通常是一个换行符)。 如果使用数组参数调用,则将每个元素写入新行。 如果调用没有参数,则输出单个logging分隔符。
用上面给出的几点做一点试验,差异似乎是:
-
调用多个参数,
print
通过“输出字段分隔符”$,
(默认为无)分隔它们,而puts
则用换行符分隔它们。 在最后的争论之后,puts
也放了一个换行符,而print
却没有。2.1.3 :001 > print 'hello', 'world' helloworld => nil 2.1.3 :002 > puts 'hello', 'world' hello world => nil 2.1.3 :003 > $, = 'fanodd' => "fanodd" 2.1.3 :004 > print 'hello', 'world' hellofanoddworld => nil 2.1.3 :005 > puts 'hello', 'world' hello world => nil
-
puts
自动解包数组,而print
不:2.1.3:001> print [1,[2,3]],[4] [1,[2,3]] [4] =>无 2.1.3:002> puts [1,[2,3]],[4] 1 2 3 4 =>零
-
print
没有参数打印$_
(get读取的最后一件事),而puts
打印换行符:2.1.3 :001 > gets hello world => "hello world\n" 2.1.3 :002 > puts => nil 2.1.3 :003 > print hello world => nil
-
print
输出logging分隔符$\
,而忽略这个variables:mark@lunchbox:~$ irb 2.1.3 :001 > $\ = 'MOOOOOOO!' => "MOOOOOOO!" 2.1.3 :002 > puts "Oink! Baa! Cluck! " Oink! Baa! Cluck! => nil 2.1.3 :003 > print "Oink! Baa! Cluck! " Oink! Baa! Cluck! MOOOOOOO! => nil
puts
调用每个参数的to_s
,并添加一个新的行到每个string,如果它不以新行结束。 print
通过调用它们的to_s
输出每个参数。
例如: puts "one two"
: one two
{新队}
puts "one two\n"
: one two
{new line} #puts不会将新行添加到结果中,因为string以新行结束
print "one two"
: one two
print "one two\n"
: one two
{新队}
还有另一种输出方式:
对于每个对象,直接写obj.inspect,后面跟着换行符到程序的标准输出。
输出debugging信息很有帮助。 p "aa\n\t"
: aa\n\t
print
命令只需要你给的任何东西,并将其打印到屏幕上。 puts
(对于“put string”)略有不同:它在你想要打印的东西后面添加一个新的(空白)行。
但…
如果你想使用“puts”在string中输出数组,你将得到和使用“print”一样的结果:
puts "#{[0, 1, nil]}": [0, 1, nil]
但是,如果不是用引用的string,那么是的。 唯一的区别是我们使用“puts”的新行。
如果使用“打印”,则不会自动创build新行。 使用'puts'它会自动创build一个新行。