Я хочу понять фрагмент кода, который я нашел в Google:
i.to_s
В приведенном выше коде i
есть целое число. По моему пониманию i
преобразуется в строку. Это правда?
Я хочу понять фрагмент кода, который я нашел в Google:
i.to_s
В приведенном выше коде i
есть целое число. По моему пониманию i
преобразуется в строку. Это правда?
Лучше сказать, что это выражение, возвращающее строковое представление целого i
. Само целое не изменяется. #pedantic.
В irb
>> 54.to_s
=> "54"
>> 4598734598734597345937423647234.to_s
=> "4598734598734597345937423647234"
>> i = 7
=> 7
>> i.to_s
=> "7"
>> i
=> 7
Как отмечено в других ответах, вызов .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)}
Это правильно. to_s
преобразует любой объект в строку, в этом случае (возможно) целое число, так как переменная называется i
.