簡體   English   中英

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]}

為什么不插入#{}

#{}並不是某種魔術,它每當發生時都會轉換為插值。 這是內插的字面語法。 在這里,您並不是按字面意思來編寫它,而是可以通過替換獲得它。 相反,您可以執行以下操作:

template = "{{name}} likes {{animal_type}}"
options  = {name: 'John', animal_type: 'dogs'}
template.gsub(/{{(.*?)}}/) { options[$1.to_sym] } # => "John likes dogs"

這將捕獲胡須內的名稱並使用其索引哈希。


更好的辦法是利用現有的格式功能 使用%{}代替小胡子:

template = "%{name} likes %{animal_type}"
options  = {name: 'John', animal_type: 'dogs'}
template % options # => "John likes dogs"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM