Esta pregunta trata sobre el formateo de las cadenas de ruby.Ruby version of to String method
En Python, las estructuras de datos incorporadas tienen incorporado un método de cadena, por lo que cuando se imprime una variable, la cadena se formatea convenientemente para que refleje la estructura de datos utilizada. Por ejemplo:
>>>$ python
Python 2.6.4 (r264:75706, Dec 7 2009, 18:45:15)
[GCC 4.4.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
$>>> a = [1,2,3,4]
$>>> str(a)
'[1, 2, 3, 4]'
$>>> print a
[1, 2, 3, 4]
$>>> d = { "a":"a", "b":"b", 1:5 }
$>>> str(d)
"{'a': 'a', 1: 5, 'b': 'b'}"
$>>> print d
{'a': 'a', 1: 5, 'b': 'b'}
$>>> x = [1, 23, 4]
$>>> print x
[1, 23, 4]
aviso de que al imprimir, el valor es [1, 2, 3, 4]
Sin embargo, en rubí, cuando trato de hacer las mismas cosas, me da este resultado:
>>>$ irb
irb(main):001:0> x = [1,23,4]
=> [1, 23, 4]
irb(main):002:0> x.to_s
=> "1234"
irb(main):003:0> puts x
1
23
4
=> nil
irb(main):004:0> print x
1234=> nil
irb(main):005:0> h = { "a" => "a", 1 => 5, 'b'=>'b' }
=> {"a"=>"a", "b"=>"b", 1=>5}
irb(main):006:0> print h
aabb15=> nil
irb(main):007:0> h.to_s
=> "aabb15"
irb(main):008:0> puts h
aabb15
=> nil
irb(main):009:0>
Como puede ver, no hay formateo con el método to_s. Además, hay un problema de exclusividad si llamo a to_s en [1,2,3,4] y [1,23,4] y [1234] porque to_s agrupa todos los elementos para que todos terminen siendo "1234". Sé que puedo tratar de emular los métodos incorporados en cadena de python para cada estructura de datos nativa anulando el método to_s ("[" + a.join (",") + "]" #just para matrices), pero me preguntaba si existe una mejor alternativa, ya que piratearla parecería romper el concepto de convención sobre configuración.
Entonces, ¿hay un equivalente en rubí del método incorporado en la cadena de Python?
gotcha, eso está más cerca de lo que quería. Gracias. Leí a través de la API Array, pero no pude encontrar una solución para esto: ------------------------------ ---------------- irb (main): 002: 0> [1, 2, 3, 4, 'a', "b"] .inspect => "[ 1, 2, 3, 4, \ "a \", \ "b \"] " --------------------------- ------------------------- sería bueno no ver las barras invertidas. ¿es posible? – dzt
imprimir [1,2,3,4, 'a', "b"] inspeccionar => [1,2,3,4, 'a', "b"] – Dogbert
gracias Adam. Pero solo por curiosidad, ¿cómo conservaría el valor de la cadena con buen formato? cuando llamaste a imprimir, el valor de retorno es nulo, no la cadena formateada. – dzt