Ad esempio, in questa riga di codice ho scritto printe putsproduco risultati diversi.
1.upto(1000).each { |i| print i if i % 2 == 0 }
Ad esempio, in questa riga di codice ho scritto printe putsproduco risultati diversi.
1.upto(1000).each { |i| print i if i % 2 == 0 }
Risposte:
puts aggiunge una nuova riga alla fine di ogni argomento se non ce n'è già una.
print non aggiunge una nuova riga.
Per esempio:
puts [[1,2,3], [4,5,nil]] Ritornerebbe:
1 2 3 4 5
Considerando print [[1,2,3], [4,5,nil]]
che tornerebbe:
[[1,2,3], [4,5, zero]]
Notare come put non genera il valore zero mentre stampa lo fa.
Una grande differenza è se si stanno visualizzando array. Soprattutto quelli con NIL. Per esempio:
print [nil, 1, 2]
dà
[nil, 1, 2]
ma
puts [nil, 1, 2]
dà
1
2
Nota, nessun elemento zero visualizzato (solo una riga vuota) e ogni elemento su una riga diversa.
nil
printgenera ogni argomento, seguito da $,, a $stdout, seguito da $\. È equivalente aargs.join($,) + $\
putsimposta entrambi $,e $\su "\ n" e quindi fa la stessa cosa di print. La differenza chiave è che ogni argomento è una nuova riga conputs .
È possibile require 'english'accedere a tali variabili globali con nomi intuitivi .
englishlib
I documenti API danno alcuni buoni suggerimenti:
print() → nil
print(obj, ...) → nilScrive gli oggetti dati su iOS . ritorna
nil.Lo stream deve essere aperto per la scrittura. Ogni dato oggetto che non è una stringa verrà convertito chiamando il suo
to_smetodo. Se chiamato senza argomenti, stampa il contenuto di$_.Se il separatore del campo di output (
$,) nonnillo è, viene inserito tra gli oggetti. Se il separatore del record di output ($\) nonnillo è, viene aggiunto all'output....
puts(obj, ...) → nilScrive gli oggetti dati su iOS . Scrive una nuova riga dopo quella che non termina già con una sequenza di nuova riga. Ritorni
nil.Lo stream deve essere aperto per la scrittura. Se chiamato con un argomento array, scrive ogni elemento su una nuova riga. Ogni dato oggetto che non è una stringa o un array verrà convertito chiamando il suo
to_smetodo. Se chiamato senza argomenti, genera una nuova riga.
Sperimentando un po 'con i punti sopra indicati, le differenze sembrano essere:
Chiamato con più argomenti, printli separa dal "separatore del campo di output" $,(che per impostazione predefinita è nulla) mentre putsli separa da newline. putsmette anche una nuova riga dopo l'argomento finale, mentre printnon lo fa.
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
=> nilputsdecomprime automaticamente gli array, mentre printnon:
2.1.3: 001> stampa [1, [2, 3]], [4] [1, [2, 3]] [4] => zero 2.1.3: 002> inserisce [1, [2, 3]], [4] 1 2 3 4 => zero
printsenza argomenti stampa $_(l'ultima cosa letta da gets), mentre putsstampa una nuova riga:
2.1.3 :001 > gets
hello world
=> "hello world\n"
2.1.3 :002 > puts
=> nil
2.1.3 :003 > print
hello world
=> nilprintscrive il separatore del record di output $\dopo tutto ciò che stampa, mentre putsignora questa variabile:
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! => nilputschiama il to_sdi ogni argomento e aggiunge una nuova riga a ciascuna stringa, se non termina con una nuova riga.
printemette semplicemente ogni argomento chiamando il loro to_s.
ad esempio
puts "one two"::
one two
{nuova linea}
puts "one two\n":
one two
{new line} #puts non aggiungerà una nuova riga al risultato, poiché la stringa termina con una nuova riga
print "one two":
one two
print "one two\n":
one two
{nuova linea}
E c'è un altro modo di produrre: p
Per ogni oggetto, scrive direttamente obj.inspect seguito da una nuova riga nell'output standard del programma.
È utile emettere un messaggio di debug.
p "aa\n\t":aa\n\t
Se si desidera eseguire l'output dell'array all'interno della stringa utilizzando puts, si otterrà lo stesso risultato come se si stesse utilizzando print:
puts "#{[0, 1, nil]}":
[0, 1, nil]
Ma se non con una stringa tra virgolette allora sì. L'unica differenza è tra la nuova linea quando usiamo puts.
printfinvece del putstuo codice di esempio darà lo stesso risultato, ma in realtà non lo è. La putsvariante aggiunge una nuova riga alla fine mentre printfquella no, proprio come nel caso in cui non vi sia alcun array interpolato nella stringa. (Necessariamente così, poiché l'interpolazione avviene quando si valuta il valore letterale della stringa.)