Ruby 中的类型转换
Type-Conversion in Ruby
理论题
我正在尝试寻找新的实用方法将整数转换为字符串,反之亦然。
我只知道 .to_s
; .to_i
; .to_f
方法,想知道是否有其他方法可以在不编写 +
将变量放在一起的情况下进行。例如:
var1 = 16
puts 'I\'m ' + var1.to_s + ' years old.'
在较长的代码中,编写所有这些只是将整数转换为字符串变得很累。
顺便说一下,我还在 Stack 上找到了这个 Timer 程序,#{
是我正在尝试做的一个例子。在没有 +
和 .to_s
的情况下向字符串添加整数但是我不知道它是如何工作的。
30.downto(0) do |i|
puts "00:00:#{'%02d' % i}"
sleep 1
end
提前感谢您的建议!
Ruby 有一个非常强大的字符串插值器功能,使用 #{...}
可以包含相当任意的 Ruby 代码。最终结果总是有效地使用 to_s
.
转换为字符串
那就是你可以这样做:
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
风格的模板字符串,而不是同时使用。它使您的代码更清晰,因为只有一种机制在起作用。
进行连接时需要 .to_s
的唯一原因是 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)
所以它实际上是一个方法调用,因此,每个方法都可以通过发出异常来限制它可以操作的内容,如果它不能或不会处理。
这叫做字符串插值。例如:
puts "I\'m #{var1} years old."
它的工作方式是这样的:
- 您必须用双引号而不是单引号将字符串括起来。
- 你把你的变量放在里面:
#{}
,例如"#{variable}
".
这将始终将 non-string 变量转换为字符串,并将它们插入(即插入)到周围的字符串中。
理论题
我正在尝试寻找新的实用方法将整数转换为字符串,反之亦然。
我只知道 .to_s
; .to_i
; .to_f
方法,想知道是否有其他方法可以在不编写 +
将变量放在一起的情况下进行。例如:
var1 = 16
puts 'I\'m ' + var1.to_s + ' years old.'
在较长的代码中,编写所有这些只是将整数转换为字符串变得很累。
顺便说一下,我还在 Stack 上找到了这个 Timer 程序,#{
是我正在尝试做的一个例子。在没有 +
和 .to_s
的情况下向字符串添加整数但是我不知道它是如何工作的。
30.downto(0) do |i|
puts "00:00:#{'%02d' % i}"
sleep 1
end
提前感谢您的建议!
Ruby 有一个非常强大的字符串插值器功能,使用 #{...}
可以包含相当任意的 Ruby 代码。最终结果总是有效地使用 to_s
.
那就是你可以这样做:
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
风格的模板字符串,而不是同时使用。它使您的代码更清晰,因为只有一种机制在起作用。
进行连接时需要 .to_s
的唯一原因是 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)
所以它实际上是一个方法调用,因此,每个方法都可以通过发出异常来限制它可以操作的内容,如果它不能或不会处理。
这叫做字符串插值。例如:
puts "I\'m #{var1} years old."
它的工作方式是这样的:
- 您必须用双引号而不是单引号将字符串括起来。
- 你把你的变量放在里面:
#{}
,例如"#{variable}
".
这将始终将 non-string 变量转换为字符串,并将它们插入(即插入)到周围的字符串中。