【问题标题】:Ruby string interpolation equivalent to python's .format()Ruby 字符串插值等效于 python 的 .format()
【发布时间】:2015-05-24 04:48:08
【问题描述】:
在python中我可以做到
_str = "My name is {}"
...
_str = _str.format("Name")
当我尝试使用红宝石时
_str = "My name is #{name}"
解释器抱怨变量 name 未定义,所以它是期待的
_str = "My name is #{name}" => {name =: "Name"}
如何在 ruby 中使用字符串占位符以供以后使用?
【问题讨论】:
标签:
ruby
string
string-interpolation
language-comparisons
【解决方案1】:
您可以使用延迟插值。
str = "My name is %{name}"
# => "My name is %{name}"
puts str % {name: "Sam"}
# => "My name is Sam"
Ruby 中的 %{} 和 % 运算符允许将字符串插值延迟到以后。 %{} 在字符串中定义命名的占位符,并且 % 将给定的输入绑定到占位符中。
【解决方案2】:
解释器不需要哈希,它需要一个名为 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"
【解决方案3】:
根据之前的答案,您可以使用 %s 代替 {} 以实现简单性和灵活性。如果您有多个未命名的占位符,请使用数组而不是字符串。
_str = "%s is a %s %s"
...
_str % %w(That nice movie) # => "That is a nice movie"