¿Cuál es la diferencia entre imprimir y poner?
Por ejemplo, en esta línea de código que escribí, print
y puts
producen resultados diferentes.
1.upto(1000).each { |i| print i if i % 2 == 0 }
8 answers
puts
agrega una nueva línea al final de cada argumento si no hay uno ya.
print
no añade una nueva línea.
Por ejemplo:
puts [[1,2,3], [4,5,nil]]
volvería:
1 2 3 4 5
Considerando que print [[1,2,3], [4,5,nil]]
volvería:
[[1,2,3], [4,5,nil]]
Observe cómo puts no genera el valor nil mientras que print lo hace.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-14 06:37:08
Una gran diferencia es si está mostrando matrices. Especialmente los que no tienen nada. Por ejemplo:
print [nil, 1, 2]
Da
[nil, 1, 2]
Pero
puts [nil, 1, 2]
Da
1
2
Tenga en cuenta que no aparece ningún elemento nil (solo una línea en blanco) y cada elemento en una línea diferente.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-06-03 14:35:51
print
muestra cada argumento, seguido de $,
, a $stdout
, seguido de $\
. Es equivalente a args.join($,) + $\
puts
establece $,
y $\
a "\n" y luego hace lo mismo que print
. La diferencia clave es que cada argumento es una nueva línea con puts
.
Puede require 'english'
para acceder a esas variables globales con nombres descriptivos.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-07-20 00:12:37
Los documentos de API dan algunos buenos consejos:
print() → nil
print(obj, ...) → nil
Escribe los objetos dados a ios. La transmisión debe estar abierta para la escritura. Si el separador de campo de salida (
$,
) no es nil, se insertará entre cada objeto. Si el separador de registros de salida ($\
) no es nil, se agregará a la salida. Si no se dan argumentos, imprime$_
. Los objetos que no son cadenas se convertirán llamando a suto_s
método. Sin argumento, imprime el contenido de la variable$_
. Devuelve nil....
puts(obj, ...) → nil
Escribe los objetos dados en ios como con
IO#print
. Escribe un separador de registros (típicamente una nueva línea) después de cualquiera que no termine ya con una secuencia de nueva línea. Si se llama con un argumento de matriz, escribe cada elemento en una nueva línea. Si se llama sin argumentos, muestra un solo separador de registros.
Experimentando un poco con los puntos dados arriba, las diferencias parecen ser:
-
Llamado con múltiples argumentos,
print
los separa por el 'separador de campo de salida'$,
(que por defecto es nada) mientras queputs
los separa por líneas nuevas.puts
también pone una nueva línea después del argumento final, mientras queprint
no lo hace.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
desempaqueta automáticamente los arrays, mientras queprint
no: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
sin argumentos imprime$_
(la última cosa que leergets
), mientras queputs
imprime una nueva línea: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
escribe el separador de registros de salida$\
después de lo que imprime, mientras queputs
ignora esta 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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-09 21:06:15
puts
llame al to_s
de cada argumento y agregue una nueva línea a cada cadena, si no termina con una nueva línea.
print
simplemente genera cada argumento llamando a su to_s
.
Por ejemplo:
puts "one two"
:
one two
{nueva línea}
puts "one two\n"
:
one two
{nueva línea} # puts no añadirá una nueva línea al resultado, ya que la cadena termina con una nueva línea
print "one two"
:
one two
print "one two\n"
:
one two
{nueva línea}
Y hay otra forma de salida: p
Para cada objeto, escribe directamente obj.inspeccionar seguido de una nueva línea a la salida estándar del programa.
Es útil generar un mensaje de depuración.
p "aa\n\t"
: aa\n\t
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-12-26 06:03:09
Si usa 'print' no creará una nueva línea automáticamente. Con 'puts' crea una nueva línea automáticamente.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-29 04:27:30
El comando print
simplemente toma lo que le das y lo imprime en la pantalla. puts
(para "poner cadena") es ligeramente diferente: agrega una nueva línea (en blanco) después de lo que desea imprimir.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-04 05:16:09
Pero...
Si desea generar una matriz dentro de una cadena usando "puts", obtendrá el mismo resultado que si estuviera usando "print":
puts "#{[0, 1, nil]}":
[0, 1, nil]
Pero si no hay una cadena entrecomillada entonces sí. La única diferencia es entre la nueva línea cuando usamos "puts".
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-09-04 12:57:04