2010-08-24 9 views
118

In Python, questo idioma per la formattazione delle stringhe è abbastanza comuneQual è l'equivalente di Ruby di Python `s =" ciao,% s. Dove è% s? " % ("John", "Maria") `

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à a questo più velocemente di quanto SO possa mai ... mi ci sono voluti circa 20 secondi per scoprire che puoi fare esattamente lo stesso in Ruby. – delnan

+0

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

risposta

202

Il modo più semplice è string interpolation. È possibile iniettare piccoli pezzi di codice Ruby direttamente nelle stringhe.

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

È inoltre possibile eseguire stringhe di formato in Ruby.

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

Ricordarsi di utilizzare parentesi quadre lì. Il rubino non ha tuple, solo array, e quelli usano parentesi quadre.

+1

Utilizzerò definitivamente il primo, mi sembra più leggibile – David

+1

Il primo non funzionerà, il # {cerca una variabile, quindi in questo caso stamperebbe la variabile John, non la stringa " John". Il secondo sembra corretto. –

+0

Buon punto Jason, lo modificherò per renderlo più chiaro. – AboutRuby

16

Quasi allo stesso modo:

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

In Ruby, le parentesi quadre indicano una tupla? Ho pensato che le parentesi quadre sono liste ... – TIMEX

+0

@TIMEX: Questa domanda aiuterà: http://stackoverflow.com/questions/525957/tuples-in-ruby –

+3

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

9

In realtà quasi la stessa

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

In Ruby 1.9 si può fare questo:

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

Edit: aggiunto mancante ':' s

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

+1

: nome1 : nome2 No? – masnun

+0

Ho modificato l'equivalente in Idomatic Ruby *, ma ora noto che la risposta accettata lo fa già: rimosso di nuovo la "modifica": -/ – toong

+0

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

Problemi correlati