打印期权和看跌期权有什么区别?

例如,在我写的这行代码中,printputs产生不同的结果。

1.upto(1000).each { |i| print i if i % 2 == 0 }
299728 次浏览

puts在每个参数的末尾添加一个新行,如果已经没有一个。

print不添加新行。


例如:

puts [[1,2,3], [4,5,nil]]返回:

1
2
3
4
5
< p >而print [[1,2,3], [4,5,nil]] 将返回:< / p >
[[1,2,3], [4,5,nil]]
Notice how puts does not output the nil value whereas print does.

print输出每个参数,后跟$,,到$stdout,后跟$\。它等价于args.join($,) + $\

puts$,$\设置为“\n”,然后做与print相同的事情。关键的区别是每一个参数puts的新行。

你可以用require 'english'来访问这些全局变量。

一个很大的区别是如果你显示数组。 尤其是NIL的。 例如:< / p >
print [nil, 1, 2]

给了

[nil, 1, 2]

puts [nil, 1, 2]

给了

1
2

注意,没有出现nil项(只是一个空行),每个项在不同的行上。

如果你想使用puts在字符串中输出数组,你将得到与使用print相同的结果:

puts "#{[0, 1, nil]}":
[0, 1, nil]

但如果不是在一个带引号的字符串中,那么是。唯一的区别是使用puts时的new line。

API文档给出了一些好的提示:

print() → nil

print(obj, ...) → nil

将给定对象写入ios。返回nil

流必须打开才能写入。每个给定的不是a的对象 字符串将通过调用它的to_s方法进行转换。当 调用,不带参数,打印$_的内容

如果输出字段分隔符($,)不是nil,它将 插入到对象之间。如果输出记录分隔符 ($\)不是nil,它被追加到输出

...

puts(obj, ...) → nil

将给定对象写入ios。在任意换行符之后写入换行符 不要已经以换行符序列结束。返回nil。< / p >

流必须打开才能写入。如果使用数组参数调用, 将每个元素写入新行。每个给定的不是a的对象 字符串或数组将通过调用其to_s方法进行转换。 如果不带参数调用,则输出一个换行符

对上面给出的点做了一点实验,区别似乎是:

  • 当有多个参数调用时,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 automatically unpacks arrays, while print does not:

    2.1.3 :001 > print [1, [2, 3]], [4]
    [1, [2, 3]][4] => nil
    2.1.3 :002 > puts [1, [2, 3]], [4]
    1
    2
    3
    4
    => nil
  • print with no arguments prints $_ (the last thing read by gets), while puts prints a newline:

    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 writes the output record separator $\ after whatever it prints, while puts ignores this variable:

    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,并在每个字符串中添加一个新行,如果它没有以new line结束。 print只是通过调用它们的to_s来输出每个参数 例如< p >: puts "one two": one two < / p >

{新行}

< p > puts "one two\n": one two < / p >

{new line} #put不会向结果中添加新行,因为字符串以新行结束

< p > print "one two": one two < / p > < p > print "one two\n": one two < / p >

{新行}

还有另一种输出方式:p

对于每个对象,直接写入obj。Inspect后面跟着一个换行符指向程序的标准输出。

有助于输出调试信息。 p "aa\n\t": aa\n\t < / p >