2012-04-27 31 views
16

Non so che cosa il termine viene chiamata, ma in Python se si digitaRubino stringa di sostituzione

num1 = 4 
num2 = 2 
print("Lucky numbers: %d %d" %(num1, num2)) 

Si ottiene "i numeri fortunati: 4 2" (sostituzione?)

Come posso fare questo in rubino?

Provando a fare lo scenario sopra, funziona se ho una variabile, ma se ho bisogno di inserire sotto più variabili le parentesi non sono una sintassi valida.

risposta

23
num1 = 4 
num2 = 2 
print "Lucky numbers: %d %d" % [num1, num2] 
26

È possibile utilizzare qualcosa chiamato String interpolation in Ruby per ottenere ciò.

es:

num1 = 4 
num2 = 2 
puts "Lucky numbers: #{num1} #{num2}"; 

Qui ogni variabile che si trova all'interno del # {} viene interpretato non come una stringa, ma come un nome di variabile e il valore viene sostituito.

+0

Si noti che questo risolve l'esigenza specifica per gli interi, ed è generalmente un buon linguaggio Ruby, ma non consente sprintf formattazione come ' "% .3f"' – Phrogz

+1

@Phrogz corretta, ma la domanda era sulla sostituzione, non formattazione. –

+1

Forse quello che stavo cercando è la formattazione. Volevo solo essere in grado di creare stringhe del genere e poi passarle ad altri metodi. – MxyL

1

Si chiama formattazione della stampa.

Checkout altri esempi Ruby Formatted Printing

Hai provato nulla di simile "%d"%10? Si restituisce "10"

1.9.3-p0 :003 > "%02x"%(10) 
=> "0a" 
1.9.3-p0 :004 > 

1.9.3-p0 :005 > print "Nicely formatted string with an int: %d" % 10 
Nicely formatted string with an int: 10 => nil 
1.9.3-p0 :006 > 
5
n1, n2 = 17, 42 
puts "Lucky single number: %d" % n1 
puts "Lucky multiple numbers: %d %d" % [ n1, n2 ] 
puts "Lucky inline interpolation: #{n1} #{n2}" 

Per la documentazione della formattazione consentito in String#% metodo leggere su Kernel#sprintf.

1

I metodi rubino che imita più da vicino quella sintassi in Python sono sprintf e format, che sono alias per l'altro. È possibile leggere informazioni approfondite su Ruby Docs.

Ecco un esempio:

num1 = 4 
num2 = 2 
sprintf("Lucky numbers: %d %d", num1, num2) 

Questo visualizzerà: "Numeri fortunati: 4 2"

parentesi sono naturalmente facoltativa.

3

È anche possibile utilizzare un hash per la sostituzione di stringhe. Questo è utile se hai più istanze che devono essere sostituite con la stessa stringa.

p "%{foo} == %{foo}" % {:foo => "bar" } 
# => "bar == bar" 
Problemi correlati