2010-08-24 13 views
118

En Python, este lenguaje de formateo de cadenas es bastante común¿Qué es el equivalente de Ruby de `s =" hello,% s de Python. ¿Dónde está% s? " % ("Juan", "María") `

s = "hello, %s. Where is %s?" % ("John","Mary") 

Cuál es el equivalente en Ruby?

+3

No hay concatenación de cadenas, sólo el formato de cadenas. Y Google responderá a esto más rápido de lo que alguna vez lo haya hecho ... me llevó unos 20 segundos descubrir que puedes hacer exactamente lo mismo en Ruby. – delnan

+0

No está pidiendo concatenación, su solicitud de formateo/sustitución. Deberías cambiar tu pregunta. Por cierto, en ruby, la concatenación se realiza con operadores + o <<. – David

Respuesta

202

La forma más sencilla es string interpolation. Puedes inyectar pequeñas piezas de código Ruby directamente en tus cadenas.

name1 = "John" 
name2 = "Mary" 
"hello, #{name1}. Where is #{name2}?" 

También puede hacer cadenas de formato en Ruby.

"hello, %s. Where is %s?" % ["John", "Mary"] 

Recuerde usar los corchetes allí. Ruby no tiene tuplas, solo arreglos, y esos usan corchetes.

+1

Definitivamente usaría el primero, me parece más legible – David

+1

El primero no funcionará, el # {} busca una variable, por lo que en este caso estaría imprimiendo la variable John, no la cadena " John". El segundo parece correcto. –

+0

Buen punto Jason, lo editaré para que quede más claro. – AboutRuby

16

Casi de la misma manera:

irb(main):003:0> "hello, %s. Where is %s?" % ["John","Mary"] 
=> "hello, John. Where is Mary?" 
+0

En Ruby, ¿los corchetes significan una tupla? Pensé que los corchetes son listas ... – TIMEX

+0

@TIMEX: Esta pregunta ayudará: http://stackoverflow.com/questions/525957/tuples-in-ruby –

+3

Ruby no tiene tuplas (al menos no forjadas en el idioma)) Sí, es una matriz ("lista" en Python realmente debería llamarse matrices ...). – delnan

9

En realidad casi la misma

s = "hello, %s. Where is %s?" % ["John","Mary"] 
40

En Ruby 1.9 se puede hacer esto:

s = "hello, %{name1}. Where is %{name2} ?" % { :name1 => 'John', :name2 => 'Mary' } 

Editar: se ha añadido perdido ':' s

Referencia: http://ruby-doc.org/core-1.9.3/String.html

+1

: name1 : name2 ¿No? – masnun

+0

He editado en el * Idomatic Ruby * equivalente, pero ahora noto que la respuesta aceptada ya lo hace, eliminé la 'edición' otra vez: -/ – toong

+0

Al usar un hash con el operador% de cadena, si el símbolo de la tecla se hace referencia en La cadena de formato no está presente, obtendrá un KeyError. – user1164178

Cuestiones relacionadas