我想了解我在Google中找到的一段代码:
i.to_s
在上面的代码i
中是一个整数。根据我的理解,i
正被转换为字符串。这是真的吗?
答案 0 :(得分:25)
最好说这是一个返回整数i
的字符串表示的表达式。整数本身不会改变。 #pedantic。
在irb
>> 54.to_s
=> "54"
>> 4598734598734597345937423647234.to_s
=> "4598734598734597345937423647234"
>> i = 7
=> 7
>> i.to_s
=> "7"
>> i
=> 7
答案 1 :(得分: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转换为等价的二进制(也就是Base 2,它仅使用“1”和“0”来表示任何数字),您可以这样做:
1024.to_s(2) #=> "10000000000"
当您想要生成字母和数字的随机组合时,转换为Base 36非常有用,因为它使用0到9之间的每个数字,然后是a到z的每个字母进行计数。 Base 36 explanation on Wikipedia。例如,下面的代码将为您提供一个长度为1到3个字符的字母和数字的随机字符串(将3更改为您想要的任何最大字符串长度,这会增加可能的组合):
rand(36**3).to_s(36)
为了更好地理解数字是如何在不同的基本系统中编写的,将此代码放入irb中,更改要了解的基本系统的括号中的36。结果打印输出将从0到35计数,其中您选择了基本系统
36.times {|i| puts i.to_s(36)}
答案 2 :(得分:2)
这是正确的。 to_s
将任何对象转换为字符串,在这种情况下(可能)是一个整数,因为该变量被称为i
。