Qual è l'equivalente di Ruby di Python `s =“ hello,% s. Dov'è% s? " % (“Giovanni”, “Maria”) `


141

In Python, questo linguaggio per la formattazione delle stringhe è abbastanza comune

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

Qual è l'equivalente in Ruby?


3
Non c'è concatenazione di stringhe, solo formattazione di stringhe. E Google risponderà più velocemente di quanto SO non abbia mai potuto ... mi ci sono voluti circa 20 secondi per scoprire che puoi fare esattamente lo stesso in Ruby.

Non stai chiedendo la concatenazione, la tua richiesta di formattazione / sostituzione. Dovresti cambiare la tua domanda. A proposito, in rubino, la concatenazione viene eseguita con + o << operatori.
David,

Risposte:


246

Il modo più semplice è l'interpolazione di stringhe . Puoi iniettare piccoli pezzi di codice Ruby direttamente nelle tue stringhe.

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

Puoi anche formattare stringhe in Ruby.

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

Ricorda di usare parentesi quadre lì. Ruby non ha tuple, solo array e quelli usano parentesi quadre.


1
Vorrei usare definitivamente il primo, mi sembra più leggibile
David

1
Il primo non funzionerà, # {} cerca una variabile, quindi in questo caso stampa la variabile John, non la stringa "John". Il secondo sembra corretto.
Jason Noble,

11
Dovresti anche fare attenzione a usare sempre virgolette doppie perché '#{name1}'non è la stessa "#{name1}".
Droogans,

3
L'interpolazione di stringhe non funziona tra virgolette singole, è necessario utilizzare virgolette doppie. Ad esempio '#{"abc"}' # => "\#{\"abc\"}""#{"abc"}" # => "abc"
:,

2
Il primo modo non è equivalente: il modello non può essere passato come valore.
Ondra Žižka,

51

In Ruby> 1.9 puoi fare questo:

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

Vedi i documenti


Ho modificato l' equivalente di Idomatic Ruby lì - ma ora noto che la risposta accettata lo fa già - ho rimosso di nuovo la 'modifica': - /
aggiunto il

Quando si utilizza un hash con l'operatore stringa%, se il simbolo della chiave a cui fa riferimento la stringa di formato non è presente, si otterrà un KeyError.
user1164178

19

Quasi allo stesso modo:

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

In Ruby, le parentesi quadre significano una tupla? Pensavo che le parentesi quadre fossero liste ...
TIMEX,

@TIMEX: questa domanda sarà di aiuto: stackoverflow.com/questions/525957/tuples-in-ruby
Manoj Govindan,

3
Ruby non ha tuple (almeno non forgiato nella lingua). Sì, è un array ("list" in Python dovrebbe davvero essere chiamato array ...).

9

In realtà quasi lo stesso

s = "hello, %s. Where is %s?" % ["John","Mary"]
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.