Ruby 字符串 #{} 无效
Ruby String #{} doesn't work
我有这是我的代码:
class Template
def initialize(temp_str)
@str = temp_str
end
def render options={}
@str.gsub!(/{{/,'#{options[:').gsub!(/}}/,']}')
puts @str
end
end
template = Template.new("{{name}} likes {{animal_type}}")
template.render(name: "John", animal_type: "dogs")
我希望结果是 John likes dogs
,但结果是
#{options[:name]} likes #{options[:animal_type]}
为什么 #{}
没有被插值?
#{}
不是什么魔法,只要它出现就可以转换为插值。这是一个用于插值的 literal 语法。这里你不是按字面意思写的,是通过替换得到的。相反,您可以这样做:
template = "{{name}} likes {{animal_type}}"
options = {name: 'John', animal_type: 'dogs'}
template.gsub(/{{(.*?)}}/) { options[.to_sym] } # => "John likes dogs"
这会捕获胡须内的名称并用它索引散列。
更好的办法是利用现有的 format functionality。使用 %{}
:
而不是小胡子
template = "%{name} likes %{animal_type}"
options = {name: 'John', animal_type: 'dogs'}
template % options # => "John likes dogs"
我有这是我的代码:
class Template
def initialize(temp_str)
@str = temp_str
end
def render options={}
@str.gsub!(/{{/,'#{options[:').gsub!(/}}/,']}')
puts @str
end
end
template = Template.new("{{name}} likes {{animal_type}}")
template.render(name: "John", animal_type: "dogs")
我希望结果是 John likes dogs
,但结果是
#{options[:name]} likes #{options[:animal_type]}
为什么 #{}
没有被插值?
#{}
不是什么魔法,只要它出现就可以转换为插值。这是一个用于插值的 literal 语法。这里你不是按字面意思写的,是通过替换得到的。相反,您可以这样做:
template = "{{name}} likes {{animal_type}}"
options = {name: 'John', animal_type: 'dogs'}
template.gsub(/{{(.*?)}}/) { options[.to_sym] } # => "John likes dogs"
这会捕获胡须内的名称并用它索引散列。
更好的办法是利用现有的 format functionality。使用 %{}
:
template = "%{name} likes %{animal_type}"
options = {name: 'John', animal_type: 'dogs'}
template % options # => "John likes dogs"