如何在Ruby编程语言中对字符串进行插值

378 阅读1分钟

字符串插值是指在一个字符串对象中添加引用其他值的占位符的过程。内插到字符串中的值被评估为其相应的值。字符串插值可以被看作是模板注入的一种形式。

在本指南中,我们将讨论如何在Ruby编程语言中对字符串进行插值。

使用+运算符

在字面字符串中插值的最简单方法是使用加法运算符。考虑一下下面的例子。

name = "Alice"
puts "Hello " + name

在上面的例子中,我们声明了一个叫做name的变量。它的值是 "Alice"。使用加法运算符,我们把它插入到一个字符串值中。

Ruby解释器将获取变量name所引用的值并将其作为实际值。结果输出如图所示。

$ ruby interpolation.rb
Hello Alice

在将变量插值到字符串中时,加法运算符包含一个缺点。它只对字符串对象起作用。

以下面的例子为例。

age = 10
puts "I am " + age + " years old"

如果你试图执行这样的操作,Ruby会返回一个TypeError

`+':没有nil隐式转换String(TypeError)。

解决这种问题的一个方法是使用to_s方法将变量转换为字符串。

比如说:

age = 10
puts ("I am " + age.to_s + " years old")

现在我们可以通过将整数变量转换为字符串的方式将其注入字符串中。

使用<<操作符

左移操作符的工作原理与加法操作符类似。它将传递的变量注入到一个字符串字面。

例子:

lang = "Ruby"
puts lang << " is an fun!"

与加法运算符类似,你必须将变量转换为字符串,以防止出现类型错误。

使用#{}

我们上面讨论的两种方法都有一个缺点;在一个字符串字面内执行表达式会变得很复杂。

请看下面的例子:

radius = 7.43
puts "The area of the cirlcle of radius " + radius.to_s + " is " + radius * radius * 3.141 + " cm2"

使用我们上面讨论的方法,上述操作是不可能的。

为了解决这个问题,我们可以使用Ruby中的表达式替换操作。

其语法如下:

#{variable}

我们把变量或表达式放在一对大括号内。Ruby将评估表达式并插值到字符串中。

考虑一下前面使用插值运算符的例子。

radius = 7.43
puts "The area of the cirlcle of radius #{radius} is #{radius * radius * 3.141} cm2"

这就好多了。使用上述符号,我们可以在一个字符串内注入一个单一变量和有效的ruby表达式。

下面是产生的输出:

$ ruby substring.rb
The area of the cirlcle of radius 7.43 is 173.3985909 cm2

在这种情况下,我们不需要执行表达式,将其转换为字符串,然后再将其插值到字符串中。

使用这种方法,Ruby会处理好一切。

总结

本指南说明了如何在Ruby语言中使用加法运算符、左移和表达式替换运算符等功能来进行字符串插值。