Ruby中的类型转换
理论问题 我试图找到新的实用方法将整数转换成字符串,反之亦然。 我只知道Ruby中的类型转换,ruby,string,type-conversion,integer,Ruby,String,Type Conversion,Integer,理论问题 我试图找到新的实用方法将整数转换成字符串,反之亦然。 我只知道。to_s.to_i.to_f方法,并想知道是否有其他方法来处理它,而无需编写+来组合变量。例如: var1 = 16 puts 'I\'m ' + var1.to_s + ' years old.' puts "I\'m #{var1} years old." 在较长的代码中,仅仅将一个整数转换成一个字符串,这一切都会让人感到厌倦 顺便说一句,我在堆栈上也找到了这个计时器程序,{就是我要做的一个例
。to_s
<代码>.to_i.to_f
方法,并想知道是否有其他方法来处理它,而无需编写+
来组合变量。例如:
var1 = 16
puts 'I\'m ' + var1.to_s + ' years old.'
puts "I\'m #{var1} years old."
在较长的代码中,仅仅将一个整数转换成一个字符串,这一切都会让人感到厌倦
顺便说一句,我在堆栈上也找到了这个计时器程序,{
就是我要做的一个例子。在没有+
和的情况下将整数添加到字符串中,但我不知道它是如何工作的
30.downto(0) do |i|
puts "00:00:#{'%02d' % i}"
sleep 1
end
提前感谢您的建议!Ruby使用{…}
提供了一个非常强大的字符串插值功能,其中可以包含相当任意的Ruby代码。最终结果总是使用转换为字符串,有效地使用to_
也就是说,您可以这样做:
puts "00:00:#{'%02d' % i}"
在这里,它被字符串化,然后被插值
这大致相当于:
i_str = '%02d' % i
puts "00:00:#{i_str}"
在有效的情况下:
i_str = '%02d' % i
puts "00:00:%s" % i_str
您还可以将其合并到单个操作中:
puts "00:00:%02d" % i
通常使用插值或sprintf
样式的模板字符串,而不是同时使用两者。由于只有一种机制在起作用,因此它可以保持代码的整洁
当进行连接时,唯一需要的原因是Ruby非常注重将两件事“相加”。x+y
有完全不同的结果,这取决于x
和y
是什么
考虑:
# Integer + Integer (Integer#+)
1 + 2
# => 3
# Array + Array (Array#+)
[ 1 ] + [ 2 ]
# => [1,2]
# String + String (String#+)
"1" + "2"
# => "12"
请注意,在每种情况下,实际上调用的是不同的方法,x+y
的一般形式是:
x.send(:+, y)
因此,它实际上是一个方法调用,因此,如果不能或不愿意处理,每个方法都可以通过发出异常来限制其操作。它被称为字符串插值。例如:
var1 = 16
puts 'I\'m ' + var1.to_s + ' years old.'
puts "I\'m #{var1} years old."
其工作方式如下:
必须将字符串括在双引号中,而不是单引号中
您将变量放在以下内容中:{}
,例如,“{variable}
”
这将始终将非字符串变量转换为字符串,并将它们插入(即插入)到周围的字符串中。Ohh,因此'%02d'
与字符串插入无关,这是一种插值形式,实际上,但不使用{…}
string interpolation mechanism.Ruby与C、Python、Perl等类似,在使用时支持字符串的printf
表示法。它的作用是让您能够更好地控制如何根据模板对该值进行插值。{…}
方法要求您自己进行所有格式化。但我唯一缺少的是d
代表什么?如果您遵循该文档链接,它将链接到d
表示“参数为十进制数”的位置。此外,我们可以强制字符串/整数组合,例如类字符串;def强制(其他)[其他.to_s,self];结束;结束
然后1+“s”#=>“1s”
(显式强制)或者类整数;别名_方法:to_str,:to_s;结束
然后“s”+1#=>“s1”
(隐式强制)所以双引号很重要,我不知道。谢谢!使用双引号时不必转义单引号。(使字符串更易于阅读)@Stefan是的,您可以在双引号内使用单引号,也可以在单引号内使用双引号,而无需转义。的文档值得一读。它解释了转义序列、插值、'…'
和'“…”
之间的区别,介绍了%q(…)
和%q(…)
等等。