272 votes

Quelle est la différence entre les options d'achat et de vente ?

Par exemple, dans cette ligne de code que j'ai écrite, print et puts produisent des résultats différents.

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

389voto

Mike Williamson Points 6836

puts ajoute une nouvelle ligne à la fin de la sortie. print ne le fait pas.

62voto

MBentley Points 369

La différence est importante si vous affichez des tableaux. Surtout ceux qui contiennent NIL. Par exemple :

print [nil, 1, 2]

donne

[nil, 1, 2]

mais

puts [nil, 1, 2]

donne

1
2

Notez qu'il n'y a pas d'élément nul qui apparaît (juste une ligne vide) et que chaque élément se trouve sur une ligne différente.

42voto

harbichidian Points 1540

print produit chaque argument, suivi de $, à $stdout suivi par $\ . Il est équivalent à args.join($,) + $\

puts définit à la fois $, et $\ à " \n "et fait ensuite la même chose que print . La différence essentielle étant que chaque argument est une nouvelle ligne avec puts .

Vous pouvez require 'english' pour accéder à ces variables globales avec des noms conviviaux .

18voto

Mark Amery Points 4705

Les documents de l'API donner quelques bons conseils :

print() → nil

print(obj, ...) → nil

Écrit le(s) objet(s) donné(s) dans ios . Le flux doit être ouvert à l'écriture. Si le séparateur de champs de sortie ( $, ) n'est pas nul, il sera inséré entre chaque objet. Si le séparateur d'enregistrement de sortie ( $\ ) n'est pas nul, il sera ajouté à la sortie. Si aucun argument n'est donné, l'impression $_ . Les objets qui ne sont pas des chaînes de caractères seront convertis en appelant leurs objets de type to_s méthode. Sans argument, imprime le contenu de la variable $_ . Renvoie un résultat nul.

...

puts(obj, ...) → nil

Ecrit les objets donnés sur ios comme avec IO#print . Écrit un séparateur d'enregistrement (généralement une nouvelle ligne) après tous les éléments qui ne se terminent pas déjà par une séquence de nouvelles lignes. Si elle est appelée avec un argument de type tableau, elle écrit chaque élément sur une nouvelle ligne. Si elle est appelée sans argument, elle écrit un seul séparateur d'enregistrement.

En expérimentant un peu avec les points donnés ci-dessus, les différences semblent être :

  • Appelé avec plusieurs arguments, print les sépare par le "séparateur de champ de sortie". $, (par défaut, rien) tandis que puts les sépare par des nouvelles lignes. puts met également une nouvelle ligne après le dernier argument, tandis que print ne le fait pas.

    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 dépile automatiquement les tableaux, tandis que print ne le fait pas :

    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 sans arguments imprime $_ (la dernière chose lue par gets ), tandis que puts imprime une nouvelle ligne :

    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 écrit le séparateur d'enregistrements de sortie $\ après ce qu'il a imprimé, alors que puts ignore cette 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

1voto

agooran Points 11

Le site print La commande prend juste ce que vous lui donnez et l'imprime à l'écran. puts (pour "put string") est légèrement différent : il ajoute une nouvelle ligne (vide) après la chose que vous voulez qu'il imprime.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X