В чем смысл i.to_s в Ruby?

Я хочу понять фрагмент кода, который я нашел в Google:

i.to_s

В приведенном выше коде i есть целое число. По моему пониманию i преобразуется в строку. Это правда?

Ответ 1

Лучше сказать, что это выражение, возвращающее строковое представление целого i. Само целое не изменяется. #pedantic.

В irb

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

Ответ 2

Как отмечено в других ответах, вызов .to_s на целое будет возвращать строковое представление этого целого.

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

Но вы также можете передать аргумент .to_s, чтобы изменить его по умолчанию Base = 10 на что-либо от Base 2 до Base 36. Вот документация: Fixnum to_s. Так, например, если вы хотите преобразовать число 1024 в эквивалент в двоичном формате (aka Base 2, который использует только "1" и "0" для представления любого числа), вы можете сделать:

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

Преобразование в базу 36 может быть полезно, когда вы хотите генерировать случайные комбинации букв и цифр, поскольку он подсчитывает использование каждого числа от 0 до 9, а затем каждую букву от a до z. Описание базы 36 в Википедии. Например, следующий код даст вам случайную строку букв и цифр длиной от 1 до 3 символов (измените 3 на любую максимальную длину строки, которую вы хотите, что увеличивает возможные комбинации):

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

Чтобы лучше понять, как цифры написаны в разных базовых системах, поместите этот код в irb, выбирая 36 в скобках для базовой системы, о которой вы хотите узнать. Полученная распечатка будет считаться от 0 до 35, в которой вы выбрали базовую систему

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

Ответ 3

Это правильно. to_s преобразует любой объект в строку, в этом случае (возможно) целое число, так как переменная называется i.