如何在单引号字符串中使用Ruby的字符串插值?

5

我有一个字符串,其中包含一些插值语句,例如description='你好!我是#{self.name}'。这个字符串存储在数据库中,并没有自动应用字符串插值。

我想在以后应用这个插值。我可以做一些疯狂的事情,比如eval("\"+description+\""),但一定有更好、更Ruby式的方法来实现这个功能,对吗?


https://en.wikibooks.org/wiki/Ruby_Programming/Syntax/Literals#The_.25_Notation - dsgriffin
在使用 eval 的情况下,您应该信任数据。否则,这会带来巨大的安全风险。 - evgeny.myasishchev
2个回答

7
使用 % 运算符:
'database store string says: %{param}' % {param: 'noice'}
#=> "database store string says: noice"

请注意,命名引用以“%”开头,而不是“#”。 - Stefan

0
class Person
  attr_reader :name

  def initialize(name)
    @name = name
  end

  def description
    'Hello! I am #{self.name}'
  end

  def interpolated_description
    description.split('#').map { |v| v.match(/\{(.*)\}/) ? send($1.split('.').last) : v  }.join
  end
end

p = Person.new('Bot')

p.interpolated_description
=> "Hello! I am Bot"

这个怎么样?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接