Ruby字符串插值相当于python的.format()

时间:2015-03-20 17:15:43

标签: ruby string string-interpolation language-comparisons

在python中,我可以做到

_str = "My name is {}"
...
_str = _str.format("Name")

当我尝试时,在红宝石中

_str = "My name is #{name}"

解释器抱怨变量名称未定义,所以它期待

_str = "My name is #{name}" => {name =: "Name"}

如何在ruby中使用字符串占位符供以后使用?

3 个答案:

答案 0 :(得分:12)

您可以使用延迟插值。

str = "My name is %{name}"
# => "My name is %{name}"

puts str % {name: "Sam"}
# => "My name is Sam"

Ruby中的%{}和%运算符允许延迟字符串插值,直到稍后。 %{}在字符串中定义命名占位符,%将给定输入绑定到占位符。

答案 1 :(得分:0)

解释器不期望哈希,它期待一个名为name的变量。

name = "Sam"
p str = "My name is #{name}" # => "My name is Sam"

%方法可以用作@rastasheep演示。它可以更简单的方式使用:

str = "My name is %s"
p str % "Name" # => "My name is Name"

答案 2 :(得分:0)

根据之前的答案,您可以使用%s代替{},以简化和灵活。如果您有多个未命名的占位符,请使用数组而不是字符串。

_str = "%s is a %s %s"
...
_str % %w(That nice movie)  # => "That is a nice movie"