Вы можете 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, это намного безопаснее.Кроме того, в зависимости от вашего фактического использования, вы также можете быть удовлетворены Форматирование строки .