[Ruby] Différence entre print, put et p

introduction

Il y a print, put et p comme fonctions de sortie d'une chaîne de caractères sur la console dans Ruby, mais j'ai essayé de résumer les différences à ma manière. Version confirmée: ruby 2.6.6p146 (2020-03-31 révision 67876) [x64-mingw32]

Expérimentez avec l'affichage

print print imprime la chaîne de caractères telle quelle. Si un objet est passé, il imprime la chaîne retournée par la méthode .to_s de l'objet.

print "abc"
print "def"

# => abcdef

Pour le caractère de saut de ligne \ n et le caractère de tabulation \ t, si vous les mettez entre guillemets simples '', ils seront échappés et affichés sous forme de caractères, et si vous les entourez de guillemets doubles" , ils seront interprétés comme des sauts de ligne et des tabulations, respectivement. indiquer.

print 'a\nb\tc'
# => a\nb\tc    #Les guillemets simples n'interprètent pas les sauts de ligne et les tabulations

print "d\ne\tf"
# => d          #Les guillemets doubles interprètent les sauts de ligne et les tabulations
# => e       f

Si un tableau ou un hachage est spécifié, il sera affiché dans le format défini.

a = [ 1, 2, 3, "4", "5", "abc" ]
b = [ a: "a1", b: "b1", c: "c1" ]
c = [ [1,2], [3,4],5 ]
print a,b,c

# => [1, 2, 3, "4", "5", "abc"][{:a=>"a1", :b=>"b1", :c=>"c1"}][[1, 2], [3, 4], 5]

puts met est affiché de la même manière que print. La grande différence est qu'un saut de ligne est ajouté à la fin. Il en va de même pour la gestion des guillemets simples et doubles.

print "abc"
print "def"

# => abc
# => def

puts 'a\nb\tc'
# => a\nb\tc    #Les guillemets simples n'interprètent pas les sauts de ligne et les tabulations

puts "d\ne\tf"    
# => d          #Les guillemets doubles interprètent les sauts de ligne et les tabulations
# => e       f

Si vous spécifiez un tableau ou un hachage, la sortie sera très différente de print. Le tableau est développé et produit avec des sauts de ligne pour chaque élément, et la chaîne de caractères n'est pas entre guillemets. Dans le cas du hachage, il est affiché sans crochets «[]». Dans un tableau imbriqué, les éléments sont affichés séparément et les informations imbriquées ne peuvent pas être saisies.

a = [ 1, 2, 3, "4", "5", "abc" ]
b = [ a: "a1", b: "b1", c: "c1" ]
c = [ [1,2], [3,4],5 ]
puts a,b,c

# => 1                               #Tous les éléments sont développés et affichés
# => 2
# => 3
# => 4                               #Les guillemets de chaîne ne sont pas affichés.
# => 5
# => abc
# => {:a=>"a1", :b=>"b1", :c=>"c1"}  #Il n'y a pas de crochets.
# => 1                               #Toutes les séquences imbriquées sont développées au même niveau
# => 2
# => 3
# => 4
# => 5

p p imprime la chaîne retournée par la méthode .inspect au lieu de .to_s lorsque l'objet est passé. De plus, un saut de ligne est ajouté à la fin de chaque ligne. La différence est que la chaîne de caractères est placée entre guillemets et sortie.

p "abc"
p "def"

# => "abc"
# => "def"

Le caractère de saut de ligne «\ n» et le caractère de tabulation «\ t» ne sont pas interprétés comme des sauts de ligne et des tabulations. Cependant, si vous le mettez entre guillemets simples `` , la version échappée de \ ʻest affichée, et si vous la mettez entre guillemets doubles" , les caractères sont affichés tels quels sans échapper.

p 'a\nb\tc'
# => "a\\nb\\tc"    # \Pour échapper à\\Sera.

p "d\ne\tf"
# => "d\ne\tf"    #Les guillemets doubles interprètent les sauts de ligne et les tabulations

Si un tableau ou un hachage est spécifié, il sera affiché dans le format défini.

a = [ 1, 2, 3, "4", "5", "abc" ]
b = [ a: "a1", b: "b1", c: "c1" ]
c = [ [1,2], [3,4],5 ]
p a,b,c

# => [1, 2, 3, "4", "5", "abc"]
# => [{:a=>"a1", :b=>"b1", :c=>"c1"}]
# => [[1, 2], [3, 4], 5]

Ce que j'ai trouvé

--puts, p ajoute automatiquement un saut de fin, mais pas print. --p est affiché avec la chaîne de caractères entre guillemets. --print, met interprète et affiche les caractères spéciaux tels que les sauts de ligne \ n et tab \ t, mais p n'interprète pas les caractères spéciaux et les affiche comme des chaînes de caractères telles quelles. .. --print, p imprime un tableau ou un hachage tel que défini, mais met développe le tableau et l'affiche avec un saut de ligne pour chaque élément.

Résumé

Au début, je pensais que «put» était une version avec un saut de ligne dans «print», mais il y avait une grande différence dans l'affichage du tableau. Si vous voulez sortir le tableau entier et le vérifier, il semble préférable de ne pas utiliser put. Dans les livres et sur le net, il existe de nombreuses descriptions indiquant que " p est pour le débogage ", mais il est certainement plus facile de voir si vous n'interprétez pas les caractères spéciaux lors du débogage, il est facile de faire la distinction entre les chaînes de caractères et les valeurs numériques, et il est facile à saisir. Donc, il est sûrement préférable de vérifier avec la fonction p lors du débogage.

Recommended Posts

[Ruby] Différence entre print, put et p
Remarque: Différence entre Ruby "p" et "met"
[Ruby] Différence entre les put et les retours, les valeurs de sortie et de retour
[Ruby] Différence entre obtenir et publier
[Ruby] Différence entre is_a? Et instance_of?
Différence entre la variable d'instance Ruby et la variable locale
Ruby print met la méthode de sortie p printf
Différence entre "|| =" et "instance_variable_defined?" Dans Ruby memo
Différence entre vh et%
Différence entre i ++ et ++ i
[Ruby] J'ai réfléchi à la différence entre each_with_index et each.with_index
Différence entre produit et variante
Différence entre redirect_to et render
[Java] Différence entre == et égal
Différence entre redirect_to et render
Différences entre les classes et les instances dans Ruby
Différence entre CUI et GUI
Différence entre les variables et les variables d'instance
Différence entre mockito-core et mockito-all
Différence entre classe et instance
Différence entre l'installation de bundle et de bundle
Différence entre ArrayList et LinkedList
Différence entre render et redirect_to
Différence entre List et ArrayList
[Ruby] Différence entre match / scan
Différence entre StringBuilder et StringBuffer
Différence entre render et redirect_to
La différence entre la programmation qui utilise des classes Ruby et la programmation qui n'utilise pas
Différence entre la méthode d'instance et la méthode de classe
Différence entre interface et classe abstraite
Différence entre l'opérateur == et la méthode égale
[Java] Différence entre Hashmap et HashTable
[Terminal] Différence entre irb et pry
JavaServlet: différence entre executeQuery et executeUpdate
Différence entre l'opérateur == et la méthode eqals
Différence approximative entre RSpec et minitest
[Rails] Différence entre find et find_by
Différence entre la variable d'instance et la variable de classe
[JAVA] Différence entre abstrait et interface
Différence entre Thymeleaf @RestController et @Controller
[Java] Différence entre array et ArrayList
Différence entre le type primitif et le type de référence
[Java] Différence entre fermable et fermable automatiquement
[Java] Différence entre StringBuffer et StringBuilder
[Java] Différence entre longueur, longueur () et taille ()
[rails] Différence entre redirect_to et render
[Android] Différence entre finish () et return;
[Ruby] Peut-être que vous ne comprenez pas vraiment? [Différence entre la classe et le module]
Facile à comprendre la différence entre la méthode d'instance Ruby et la méthode de classe.
Différence entre final et immuable en Java
[Remarque] Différence entre l'installation et la mise à jour du bundle
Différence entre pop () et peek () dans la pile