Функция, которая возвращает функцию на основе текста выражения - PullRequest
2 голосов
/ 24 июля 2011

Я хотел бы создать функцию (назовите ее fcreate), которая при получении строки возвращает функцию Lua.Например, я должен иметь возможность сказать

f=fcreate("math.sin(x)+math.cos(x)")
print(f(2)) -- evaluates sin(2)+cos(2)
print(f(3)) -- evaluates sin(3)+cos(3)

Чтобы упростить задачу, строка будет просто функцией x.

Я пробовал следующее, но это не сработало:

function fcreate(fs)
  assert(loadstring("local f=function (x) return ".." end"))
  return f
end

По какой-то причине возвращаемое f равно nil.

Ответы [ 3 ]

4 голосов
/ 24 июля 2011

Попробуйте это.

function fcreate(fs)
  local f = assert(loadstring("return " .. fs))
  return f
end

Если есть параметры, вы можете использовать ... для их получения. Но если вам абсолютно необходимы именованные параметры:

function fcreate(fs)
  local f = assert(loadstring("local x = ...; return " .. fs))
  return f
end
2 голосов
/ 24 июля 2011

Вы почти поняли это правильно.Попробуйте это

function fcreate(fs)
  return assert(loadstring("return function (x) return " .. fs.." end"))()
end
0 голосов
/ 24 июля 2011

CoronaSDK находится в песочнице, поэтому loadstring, dostring, loadfile и dofile все недоступны.

(это означает, что нет способа перейти от строки к коду lua во время выполнения)

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