我有一個字符串,其中包含一些插值語句,如description='Hello! I am #{self.name}'
。該字符串按原樣存儲在數據庫中;所以沒有應用自動字符串插值。Ruby將字符串插值應用於單引號字符串
我想在稍後的日期應用此插值。我可以做一些像eval("\"+description+\"")
這樣瘋狂的事情,但必須有更好,更紅寶石般的方式才能做到這一點,對吧?
我有一個字符串,其中包含一些插值語句,如description='Hello! I am #{self.name}'
。該字符串按原樣存儲在數據庫中;所以沒有應用自動字符串插值。Ruby將字符串插值應用於單引號字符串
我想在稍後的日期應用此插值。我可以做一些像eval("\"+description+\"")
這樣瘋狂的事情,但必須有更好,更紅寶石般的方式才能做到這一點,對吧?
使用%
操作:
'database store string says: %{param}' % {param: 'noice'}
#=> "database store string says: noice"
請注意,命名引用以'%'開始,而不是'#' – Stefan
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"
這個怎麼樣?
https://en.wikibooks.org/wiki/Ruby_Programming/Syntax/Literals#The_.25_Notation – lifetimes
在eval的情況下,您應該信任數據。在其他情況下,這是一個巨大的安全風險。 –