¿Cuál es la mejor manera de generar una cadena larga rápidamente en ruby? Esto funciona, pero es muy lento:
str = ""
length = 100000
(1..length).each {|i| str += "0"}
También he notado que crear una cadena de una longitud decente y luego agregarla a una cadena existente hasta la longitud deseada funciona mucho más rápido:
str = ""
incrementor = ""
length = 100000
(1..1000).each {|i| incrementor += "0"}
(1..100).each {|i| str += incrementor}
¿Cualquier otra sugerencia?

Respuestas:
fuente
str = "0" * 99999999999 * "0"me saleTypeError: String can't be coerced into Fixnum"0" * 999999se trata como"0".*(999999)donde*es un método en elStringclase. Ese método acepta números como argumentos válidos para realizar la replicación de cadenas. Cuando inviertes la expresión, obtenemos999999.*("0"). Ahora estamos hablando del*método en laFixNumclase, y ese método se niega a tomar cadenas como argumentos. Ciertamente podría (por ejemplo, automáticamente haciendo un mejor esfuerzo para convertir el argumento en un FixNum), pero los diseñadores del lenguaje decidieron no aceptar las inspiraciones de Ruby's Perlish demasiado completamente.Otra opción relativamente rápida es
Aunque el benchmarking
Muestra que la multiplicación es aún más rápida.
fuente