Ruby on Rails: строка с переменным парсингом - PullRequest
1 голос
/ 23 марта 2012

в ruby ​​я могу построить переменную с такой датой

irb(main):004:0> a = "#{Date.today}" => "2012-03-23"

Но как я могу сделать это с уже созданной строкой:

irb(main):005:0> a = '#{Date.today}' => "\#{Date.today}"

Фон таков, чтоЯ храню путь с различными переменными в базе данных, и мне нужно заменить эти переменные во время выполнения.

Спасибо за любую помощь.

Ответы [ 2 ]

2 голосов
/ 23 марта 2012

Если вы действительно хотите запустить произвольный код Ruby, вы можете использовать eval, например:

a = '#{Date.today}'
eval("\"#{a}\"")
2 голосов
/ 23 марта 2012

Вы можете eval строка, подобная

a = 'Date.today'
result = eval(a)

Хотя это работает, это может быть чрезвычайно опасно, если вы не полностью контролируете содержимое этой строки (а это действительно * 1006)* трудно, если имеешь дело с любым типом пользовательского ввода).

Так что, в общем, советуем никогда не использовать eval.Вместо этого вы можете создать простой DSL (предметно-ориентированный язык), в котором у вас есть токены в строке, которые впоследствии будут заменены предварительно вычисленными значениями.Простым примером может быть:

a = "Today is :today"
result = a.gsub(/:(\w+)/) do |match|
  case $1
  when "today"
    Date.today.to_s
  end
end

Поскольку вы не оцениваете произвольный код Ruby, это намного безопаснее.Кроме того, в зависимости от вашего фактического использования, вы также можете быть удовлетворены Форматирование строки .

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