¿Cuál es el equivalente de Ruby de `s =“ hola,% s de Python! ¿Dónde está% s? % ("John", "Mary") `


141

En Python, este idioma para el formato de cadenas es bastante común

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

¿Cuál es el equivalente en Ruby?


3
No hay concatenación de cadenas, solo formato de cadenas. Y Google responderá esto más rápido de lo que incluso SO podría ... me tomó unos 20 segundos descubrir que puedes hacer exactamente lo mismo en Ruby.

No está solicitando concatenación, está solicitando formato / sustitución. Deberías cambiar tu pregunta. Por cierto, en ruby, la concatenación se realiza con operadores + o <<.
David

Respuestas:


246

La forma más fácil es la interpolación de cadenas . Puede inyectar pequeños trozos de código Ruby directamente en sus 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 corchetes allí. Ruby no tiene tuplas, solo matrices, y esas 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.
Jason Noble

11
También debe tener cuidado de usar siempre comillas dobles, ya '#{name1}'que no es lo mismo que "#{name1}".
Droogans

3
La interpolación de cadenas no funciona entre comillas simples, debe usar comillas dobles. Por ejemplo: '#{"abc"}' # => "\#{\"abc\"}"pero lo que quieres es"#{"abc"}" # => "abc"
bschlueter

2
La primera forma no es equivalente: la plantilla no se puede pasar como un valor.
Ondra Žižka

51

En Ruby> 1.9 puedes hacer esto:

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

Ver los documentos


Edité el equivalente de Idomatic Ruby allí, pero ahora me doy cuenta de que la respuesta aceptada ya lo hace, eliminé la 'edición' nuevamente: - /
toong

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

19

Casi de la misma manera:

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

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


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

9

En realidad casi lo mismo

s = "hello, %s. Where is %s?" % ["John","Mary"]
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.