[Ruby] Unterschied zwischen print, put und p

Einführung

Es gibt print, put und p als Funktionen zum Ausgeben einer Zeichenkette an die Konsole in Ruby, aber ich habe versucht, die Unterschiede auf meine eigene Weise zusammenzufassen. Bestätigte Version: Ruby 2.6.6p146 (2020-03-31 Revision 67876) [x64-mingw32]

Experimentieren Sie mit dem Display

print print druckt die Zeichenfolge so wie sie ist. Wenn ein Objekt übergeben wird, wird die von der Methode ".to_s" des Objekts zurückgegebene Zeichenfolge gedruckt.

print "abc"
print "def"

# => abcdef

Wenn Sie für das Zeilenvorschubzeichen "\ n" und das Tabulatorzeichen "\ t" in einfache Anführungszeichen "" setzen, werden sie maskiert und als Zeichen angezeigt. Wenn Sie sie in doppelte Anführungszeichen "" setzen, werden sie als Zeilenumbrüche bzw. Tabulatoren interpretiert. zeigen.

print 'a\nb\tc'
# => a\nb\tc    #Einfache Anführungszeichen interpretieren keine Zeilenumbrüche und Tabulatoren

print "d\ne\tf"
# => d          #Doppelte Anführungszeichen interpretieren Zeilenumbrüche und Tabulatoren
# => e       f

Wenn ein Array oder ein Hash angegeben wird, wird es im definierten Format angezeigt.

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 put wird genauso angezeigt wie print. Der große Unterschied besteht darin, dass am Ende ein Zeilenumbruch hinzugefügt wird. Gleiches gilt für die Behandlung von einfachen und doppelten Anführungszeichen.

print "abc"
print "def"

# => abc
# => def

puts 'a\nb\tc'
# => a\nb\tc    #Einfache Anführungszeichen interpretieren keine Zeilenumbrüche und Tabulatoren

puts "d\ne\tf"    
# => d          #Doppelte Anführungszeichen interpretieren Zeilenumbrüche und Tabulatoren
# => e       f

Wenn Sie ein Array oder einen Hash angeben, unterscheidet sich die Ausgabe stark von "print". Das Array wird für jedes Element erweitert und mit Zeilenumbrüchen ausgegeben, und die Zeichenfolge wird nicht in Anführungszeichen gesetzt. Im Fall von Hash wird es ohne eckige Klammern "[]" angezeigt. In einem verschachtelten Array werden die Elemente separat angezeigt, und die verschachtelten Informationen können nicht erfasst werden.

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                               #Alle Elemente werden erweitert und angezeigt
# => 2
# => 3
# => 4                               #Zeichenfolgenzitate werden nicht angezeigt.
# => 5
# => abc
# => {:a=>"a1", :b=>"b1", :c=>"c1"}  #Es gibt keine eckigen Klammern.
# => 1                               #Alle verschachtelten Sequenzen werden auf derselben Ebene erweitert
# => 2
# => 3
# => 4
# => 5

p p druckt die Zeichenfolge, die von der .inspect -Methode anstelle von .to_s zurückgegeben wird, wenn das Objekt übergeben wird. Zusätzlich wird am Ende jeder Zeile ein Zeilenumbruch hinzugefügt. Der Unterschied besteht darin, dass die Zeichenfolge in doppelte Anführungszeichen gesetzt und ausgegeben wird.

p "abc"
p "def"

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

Das Zeilenvorschubzeichen "\ n" und das Tabulatorzeichen "\ t" werden nicht als Zeilenumbrüche und Tabulatoren interpretiert. Wenn Sie es jedoch in einfache Anführungszeichen setzen, wird die maskierte Version von "" angezeigt, und wenn Sie es in doppelte Anführungszeichen setzen, werden die Zeichen so angezeigt, wie sie sind, ohne zu maskieren.

p 'a\nb\tc'
# => "a\\nb\\tc"    # \Fliehen\\Wird sein.

p "d\ne\tf"
# => "d\ne\tf"    #Doppelte Anführungszeichen interpretieren Zeilenumbrüche und Tabulatoren

Wenn ein Array oder ein Hash angegeben wird, wird es im definierten Format angezeigt.

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]

Was ich fand

--puts, p fügt automatisch eine nachgestellte Unterbrechung hinzu, print jedoch nicht. --p wird mit der in doppelte Anführungszeichen eingeschlossenen Zeichenfolge ausgegeben. --print, put interpretiert und zeigt Sonderzeichen wie Zeilenumbrüche \ n und tab \ t an, aber p interpretiert keine Sonderzeichen und gibt sie so wie sie sind als Zeichenfolgen aus. .. --print, p druckt ein Array oder einen Hash wie definiert, aber put erweitert das Array und druckt es mit einem Zeilenumbruch für jedes Element.

Zusammenfassung

Zuerst dachte ich, dass "Puts" eine Version mit einem Zeilenumbruch in "Print" ist, aber es gab einen großen Unterschied in der Array-Anzeige. Wenn Sie das gesamte Array ausgeben und überprüfen möchten, ist es besser, keine Puts zu verwenden. In Büchern und im Internet gibt es viele Beschreibungen, dass " p zum Debuggen ist ", aber es ist sicherlich einfacher zu erkennen, ob Sie beim Debuggen keine Sonderzeichen interpretieren, es ist einfach, zwischen Zeichenfolgen und numerischen Werten zu unterscheiden, und es ist einfach einzugeben. Es ist also sicherlich besser, beim Debuggen die Funktion "p" zu überprüfen.

Recommended Posts

[Ruby] Unterschied zwischen print, put und p
Hinweis: Unterschied zwischen Ruby "p" und "Puts"
[Ruby] Unterschied zwischen Puts und Return, Output und Return
[Ruby] Unterschied zwischen get und post
[Ruby] Unterschied zwischen is_a? Und instance_of?
Unterschied zwischen Ruby-Instanzvariable und lokaler Variable
Ruby print setzt die Ausgabemethode p printf
Unterschied zwischen "|| =" und "instance_variable_defined?" Im Ruby-Memo
Unterschied zwischen vh und%
Unterschied zwischen i ++ und ++ i
[Ruby] Ich habe über den Unterschied zwischen each_with_index und each.with_index nachgedacht
Unterschied zwischen Produkt und Variante
Unterschied zwischen redirect_to und render
[Java] Unterschied zwischen == und gleich
Unterschied zwischen redirect_to und render
Unterschiede zwischen Klassen und Instanzen in Ruby
Unterschied zwischen CUI und GUI
Unterschied zwischen Variablen und Instanzvariablen
Unterschied zwischen Mockito-Core und Mockito-All
Unterschied zwischen Klasse und Instanz
Unterschied zwischen Bundle und Bundle-Installation
Unterschied zwischen ArrayList und LinkedList
Unterschied zwischen render und redirect_to
Unterschied zwischen List und ArrayList
[Ruby] Unterschied zwischen Match / Scan
Unterschied zwischen StringBuilder und StringBuffer
Unterschied zwischen render und redirect_to
Der Unterschied zwischen der Programmierung mit Ruby-Klassen und der Programmierung ohne Ruby-Klassen
Unterschied zwischen Instanzmethode und Klassenmethode
Unterschied zwischen Schnittstelle und abstrakter Klasse
Unterschied zwischen == Operator und Methode gleich
[Java] Unterschied zwischen Hashmap und HashTable
[Terminal] Unterschied zwischen irb und pry
JavaServlet: Unterschied zwischen executeQuery und executeUpdate
Unterschied zwischen dem Operator == und der Methode eqals
Grober Unterschied zwischen RSpec und Minitest
[Rails] Unterschied zwischen find und find_by
Unterschied zwischen Instanzvariable und Klassenvariable
[JAVA] Unterschied zwischen Abstract und Interface
Unterschied zwischen Thymeleaf @RestController und @Controller
[Java] Unterschied zwischen Array und ArrayList
Unterschied zwischen primitivem Typ und Referenztyp
[Java] Unterschied zwischen Closeable und AutoCloseable
[Java] Unterschied zwischen StringBuffer und StringBuilder
[Java] Unterschied zwischen Länge, Länge () und Größe ()
[Rails] Unterschied zwischen redirect_to und Rendern
[Android] Unterschied zwischen finish () und return;
[Ruby] Vielleicht verstehst du das nicht wirklich? [Unterschied zwischen Klasse und Modul]
Der Unterschied zwischen der Ruby-Instanzmethode und der Klassenmethode ist leicht zu verstehen.
Unterschied zwischen final und Immutable in Java
[Hinweis] Unterschied zwischen Bundle-Installation und -Update
Unterschied zwischen pop () und peek () im Stapel