Аналог функции eval для lua

Страницы: 1
RSS
Аналог функции eval для lua, Аналог функции eval для lua
 
Задача простая.
Есть переменная типа string str = "1+(2*3)".
Нужно из неё получить результат 7.
Есть два способа.
Первый - пишем парсерную функцию eval. Хорошая функция, учитывающая скобки, приоритет операций и т.д. занимает около 1000 строк.
Второй - просто и изящно передаём строку в назначение переменной, например res = 1+(2*3), будет равен 7.
Код
function calculateString(str) {
  return (new Function('return ' + str))();
}
Это пример для JavaScript. Где-то видел аналогичный для LUA, но не могу найти.
Помогите с решением задачки.  :what:
 
надо делать не парсер а интерпретатор и будет он  как минимум на порядок меньше, чем 1000 строк.
Если строка динамически меняется, то решение на джава не работает и единственное решение на любом языка - это интерпретатор строки.
 
если надо очень быстро, то пишите на СИ dll.
 
Здравствуйте,
Можно попробовать через loadstring
Код
function calculateString(str)
   return assert(loadstring("return "..str))()
end
 
Цитата
Sergey Gorokhov написал:
Здравствуйте,
Можно попробовать через loadstring
Код
   function   calculateString (str)
    return  assert(loadstring( "return "  .. str))()
 end 
  
Nkmr нужнo пoнимать вoзникающие при этoм oграничения с upvalues
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
Цитата
Sergey Gorokhov написал:
Здравствуйте,
Можно попробовать через loadstring
Код
   function   calculateString (str)
    return  assert(loadstring( "return "  .. str))()
 end 
  
Отличное решение! Большое Вам спасибо!
Как и предполагал, можно пользоваться всеми math функциями, например, "math.pow(3,2)" выведет
 
...выведет 9.
Страницы: 1
Читают тему
Наверх