2011-11-21 12 views
10

voglio capire un pezzo di codice che ho trovato in Google:Qual è il significato di i.to_s in Ruby?

i.to_s 

Nel codice precedente i è un intero. Per quanto ne so, i viene convertito in una stringa. È vero?

+1

Indovinare è giusto, 'metodo to_s' ritorna rappresentazione di stringa di un oggetto (in questo caso il numero di' I'). Ma per quel tipo di domande suggerirei di usare Ruby [documentazione] (http://www.ruby-doc.org/). È possibile trovare la documentazione per ogni metodo dalla libreria standard lì. –

+0

grazie davvero comprensibile –

risposta

20

È meglio dire che questa è un'espressione che restituisce la rappresentazione in stringa dell'intero i. L'intero stesso non cambia. #pedante.

In IRB

>> 54.to_s 
=> "54" 
>> 4598734598734597345937423647234.to_s 
=> "4598734598734597345937423647234" 
>> i = 7 
=> 7 
>> i.to_s 
=> "7" 
>> i 
=> 7 
2

Ciò è corretto. to_s converte qualsiasi oggetto in una stringa, in questo caso (probabilmente) un numero intero, poiché la variabile è denominata i.

6

Come osservato nelle altre risposte, chiamando .to_s su un numero intero restituirà la rappresentazione di stringa di quel numero intero.

9.class   #=> Fixnum 
9.to_s   #=> "9" 
9.to_s.class #=> String 

Ma si può anche passare un argomento per .to_s per cambiare dalla base di default = 10 per qualsiasi cosa, da base 2 a base 36. Ecco la documentazione: Fixnum to_s. Così, per esempio, se si voleva convertire il numero 1024 a E 'equivalente in formato binario (alias Base 2, che utilizza solo "1" e "0" per rappresentare qualsiasi numero), si potrebbe fare:

1024.to_s(2) #=> "10000000000" 

La conversione in Base 36 può essere utile quando si desidera generare combinazioni casuali di lettere e numeri, poiché conta utilizzando ogni numero da 0 a 9 e quindi ogni lettera dalla a alla z. Base 36 explanation on Wikipedia. Ad esempio, il seguente codice vi darà una stringa casuale di lettere e numeri di lunghezza da 1 a 3 caratteri (cambiare la 3 a qualsiasi lunghezza massima della stringa che si desidera, che aumenta le possibili combinazioni):

rand(36**3).to_s(36) 

Per capire meglio come sono scritti i numeri nei diversi sistemi di base, inserire questo codice in irb, cambiando il 36 tra parentesi per il sistema di base che si desidera conoscere. La stampa risultante conterà da 0 a 35 in cui il sistema di base mai si è scelto

36.times {|i| puts i.to_s(36)} 
Problemi correlati