Как заменить строку хэшем в ruby, используя .gsubs? - PullRequest
0 голосов
/ 02 мая 2019

Я только начал изучать Ruby, и мне нужно создать шаблон, который заменяет мои строки хэшами, которые я пишу.Что мне нужно добавить в мой код?

Это мой код, я пишу два метода для своей задачи, помогите пожалуйста с вашими предложениями

class Template 

  def initialize(template_string, local_variables)
    @template_string = template_string
    @local_variables = local_variables
  end 

  def compile()
    @template_string.gsub()
  end
end



puts Template.new("I like %{x}", x:"coffee").compile # x = coffee
puts Template.new("x = %{x}", y:5).compile # unknown x
puts Template.new("x = %{x}", x:5, y:3).compile # x = 5, ignores y

Ответы [ 2 ]

1 голос
/ 02 мая 2019

Нет необходимости использовать gsub. Просто используйте String#% спецификации формата.

def compile
  @template_string % @local_variables
end

Весь пример:

class Template
  def initialize(template_string, local_variables)
    @template_string = template_string
    @local_variables = local_variables
  end 

  def compile
    @template_string % @local_variables
  end
end

Template.new("I like %{x}", x: "coffee").compile
#=> "I like coffee"

Template.new("x = %{x}", y: 5).compile
#=> KeyError (key{x} not found)

Template.new("x = %{x}", x: 5, y: 3).compile
#=> "x = 5"
1 голос
/ 02 мая 2019

Для начала, пожалуйста, прочитайте, как использовать String # gsub метод. Затем переписать Template#compile так:

 def compile
  compiled = @template_string.dup

  @local_variables.each do |k, v|
    compiled.gsub!("%{#{k}}", String(v))
  end

  compiled
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...