3

我有很多遵循某种模式的字符串:

string = "Hello, @name. You did @thing." # example

基本上,我的字符串是@word 是动态的描述。我需要在运行时用一个值替换每个值。

string = "Hello, #{@name}. You did #{@thing}." # Is not an option!

@word 基本上是一个变量,但我不能使用上面的方法。我该怎么做?

4

2 回答 2

10

代替进行搜索/替换,您可以使用Kernel#sprintf方法或其%速记。结合哈希,它可以派上用场:

'Hello, %{who}. You did %{what}' % {:who => 'Sal', :what => 'wrong'}
# => "Hello, Sal. You did wrong" 

使用 Hash 而不是 Array 的优点是您不必担心排序,并且可以在字符串的多个位置插入相同的值。

于 2013-03-13T19:41:06.033 回答
4

您可以使用可以使用 String 的运算符动态切换的占位符来格式化您的字符串%

string = "Hello, %s. You did %s"

puts string % ["Tony", "something awesome"]
puts string % ["Ronald", "nothing"]

#=> 'Hello, Tony. You did something awesome'
#=> 'Hello, Ronald. You did nothing'

可能的用例:假设您正在编写一个将名称和操作作为参数的脚本。

puts "Hello, %s. You did %s" % ARGV

假设 'tony' 和 'nothing' 是前两个参数,你会得到'Hello, Tony. You did nothing'.

于 2013-03-13T19:41:55.517 回答