Zum Beispiel habe ich in dieser Codezeile geschrieben printund putsunterschiedliche Ergebnisse erzielt.
1.upto(1000).each { |i| print i if i % 2 == 0 }
Zum Beispiel habe ich in dieser Codezeile geschrieben printund putsunterschiedliche Ergebnisse erzielt.
1.upto(1000).each { |i| print i if i % 2 == 0 }
Antworten:
puts Fügt am Ende jedes Arguments eine neue Zeile hinzu, falls noch keine vorhanden ist.
print fügt keine neue Zeile hinzu.
Beispielsweise:
puts [[1,2,3], [4,5,nil]] Würden zurückkehren:
1 2 3 4 5
In print [[1,2,3], [4,5,nil]]
der Erwägung, dass zurückkehren würde:
[[1,2,3], [4,5, nil]]
Beachten Sie, dass Puts den Nullwert nicht ausgeben, während Print dies tut.
Ein großer Unterschied besteht darin, ob Sie Arrays anzeigen. Besonders diejenigen mit NIL. Beispielsweise:
print [nil, 1, 2]
gibt
[nil, 1, 2]
aber
puts [nil, 1, 2]
gibt
1
2
Beachten Sie, dass kein Null-Element (nur eine leere Zeile) und jedes Element in einer anderen Zeile angezeigt wird.
nil
printgibt jedes Argument aus, gefolgt von $,, bis $stdout, gefolgt von $\. Es ist äquivalent zuargs.join($,) + $\
putssetzt beide $,und $\auf "\ n" und macht dann dasselbe wie print. Der Hauptunterschied besteht darin, dass jedes Argument eine neue Zeile mit ist puts.
Sie können require 'english'auf diese globalen Variablen mit benutzerfreundlichen Namen zugreifen .
englishlib
Die API-Dokumente geben einige gute Hinweise:
print() → nil
print(obj, ...) → nilSchreibt die angegebenen Objekte in ios . Rückgabe
nil.Der Stream muss zum Schreiben geöffnet werden. Jedes Objekt, das keine Zeichenfolge ist, wird durch Aufrufen seiner
to_sMethode konvertiert . Wenn ohne Argumente aufgerufen, wird der Inhalt von gedruckt$_.Wenn das Ausgabefeldtrennzeichen (
$,) nicht vorhanden istnil, wird es zwischen Objekten eingefügt. Wenn das Trennzeichen für den Ausgabedatensatz ($\) nicht vorhanden istnil, wird es an die Ausgabe angehängt....
puts(obj, ...) → nilSchreibt die angegebenen Objekte in ios . Schreibt eine neue Zeile nach einer, die noch nicht mit einer neuen Zeile endet. Rückgabe
nil.Der Stream muss zum Schreiben geöffnet werden. Wenn mit einem Array-Argument aufgerufen, wird jedes Element in eine neue Zeile geschrieben. Jedes Objekt, das keine Zeichenfolge oder kein Array ist, wird durch Aufrufen seiner
to_sMethode konvertiert . Wenn ohne Argumente aufgerufen, wird eine einzelne neue Zeile ausgegeben.
Wenn man ein wenig mit den oben angegebenen Punkten experimentiert, scheinen die Unterschiede zu sein:
Wird mit mehreren Argumenten aufgerufen printund durch das 'Ausgabefeldtrennzeichen' $,(standardmäßig nichts) putsgetrennt, während sie durch Zeilenumbrüche getrennt werden. putssetzt auch eine neue Zeile nach dem letzten Argument, während printdies nicht der Fall ist.
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
=> nilputsentpackt Arrays automatisch, während printdies nicht der Fall ist:
2.1.3: 001> print [1, [2, 3]], [4] [1, [2, 3]] [4] => Null 2.1.3: 002> setzt [1, [2, 3]], [4] 1 2 3 4 => Null
printohne Argumente wird gedruckt $_(das letzte, was von gelesen wird gets), während putseine neue Zeile gedruckt wird:
2.1.3 :001 > gets
hello world
=> "hello world\n"
2.1.3 :002 > puts
=> nil
2.1.3 :003 > print
hello world
=> nilprintschreibt das Trennzeichen für den Ausgabedatensatz $\nach dem Drucken und putsignoriert diese 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! => nilputsRufen Sie das to_svon jedem Argument auf und fügen Sie jeder Zeichenfolge eine neue Zeile hinzu, wenn sie nicht mit einer neuen Zeile endet.
printGeben Sie einfach jedes Argument aus, indem Sie ihre aufrufen to_s.
zum Beispiel
puts "one two"::
one two
{Neue Zeile}
puts "one two\n"::
one two
{neue Zeile} #puts fügt dem Ergebnis keine neue Zeile hinzu, da die Zeichenfolge mit einer neuen Zeile endet
print "one two"::
one two
print "one two\n"::
one two
{Neue Zeile}
Und es gibt noch einen anderen Weg zur Ausgabe: p
Schreibt für jedes Objekt direkt obj.inspect, gefolgt von einer neuen Zeile in die Standardausgabe des Programms.
Es ist hilfreich, eine Debugging-Nachricht auszugeben.
p "aa\n\t"::aa\n\t
Wenn Sie ein Array innerhalb eines Strings mit ausgeben möchten puts, erhalten Sie dasselbe Ergebnis wie mit print:
puts "#{[0, 1, nil]}":
[0, 1, nil]
Aber wenn nicht mit einer Zeichenfolge in Anführungszeichen, dann ja. Der einzige Unterschied besteht zwischen neuen Zeilen, wenn wir verwenden puts.
printfanstelle von putsin Ihrem Beispielcode das gleiche Ergebnis liefert, dies jedoch nicht. Die putsVariante fügt am Ende eine neue Zeile hinzu, während printfdies nicht der Fall ist, genau wie in dem Fall, in dem kein Array in die Zeichenfolge interpoliert ist. (Notwendigerweise, da die Interpolation bei der Auswertung des String-Literal erfolgt.)