Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby中的类型转换_Ruby_String_Type Conversion_Integer - Fatal编程技术网

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(…)
    等等。