История изменений
Исправление router, (текущая версия) :
Прочитал перловый код. Если выкинуть защиту от дурака, останется не так уж и много
- проверка, что в строке с формулой нет ничего, кроме переменных, цифр и ограниченного набора операций
- выбор из строки всех переменных
- проверка, что все эти переменные уже есть или могут быть получены
- проверка на отсутствие рекурсии
- подстановка значений переменных через замену по regexp'ам ( тупо по всему списку переменных из п.2
s/{$vars[i]}/\$value[i]/g
- вычисление строки через eval
- проверка, не вернул ли eval ошибку
С учётом советов, оберну eval в лямбду, которая на вход получает словарь Data с переменными, а возвращает [error,value]
И замена по регуляркам будет не заменять имя на значение, а менять {name} на Data['name']
Исходная версия router, :
Прочитал перловый код. Если выкинуть защиту от дурака, останется не так уж и много
- проверка, что в строке с формулой нет ничего, кроме переменных, цифр и ограниченного набора операций
- выбор из строки всех переменных
- проверка, что все эти переменные уже есть или могут быть получены
- проверка на отсутствие рекурсии
- подстановка значений переменных через замену по regexp'ам ( тупо по всему списку переменных из п.2 s/$vars/$value/
- вычисление строки через eval
- проверка, не вернул ли eval ошибку
С учётом советов, оберну eval в лямбду, которая на вход получает словарь Data с переменными, а возвращает [error,value]
И замена по регуляркам будет не заменять имя на значение, а менять {name} на Data['name']