2010-08-19 4 views
4

Я использую LuaSocket и http.request для вызова удаленного PHP-скрипта, который генерирует таблицу Lua и выводит ее в браузер.Строка для таблицы в Lua

Когда я сохраняю ответ http.request в переменной, это строка, которая делает таблицу непригодной для использования в моем коде Lua.

Например:

eventData = http.request("http://www.example.com/events.php") 
print(eventData) 

--print outputs this "string", that is really a Lua table that PHP generated 
months={ 
    'January', 
    'February', 
    'March', 
    'April', 
    'May', 
    'June', 
    'July', 
    'August', 
    'September', 
    'October', 
    'November', 
    'December', 
} 

Если я пытаюсь вызова месяцев [4], например, это ошибки вне с «попыткой глобальный индекс„месяца“(нилъ значение)». Как я могу использовать эту строку в качестве полезной таблицы?

Спасибо!

ответ

10

Вы можете использовать loadstring, чтобы создать кусок lua, который вы можете выполнить.

eventData = [[ 
months = { 
    'January', 
    'February', 
    'March', 
    'April', 
    'May', 
    'June', 
    'July', 
    'August', 
    'September', 
    'October', 
    'November', 
    'December', 
} 
]] 

loadstring(eventData)() 
if months then 
    print(table.concat(months, ", ")) 
end 
+0

Хорошо работает. Спасибо! – Trae

+3

Технически вы должны использовать 'assert (loadstring (eventData))()' для распространения любых синтаксических ошибок в предоставленном коде (в отличие от простое выскакивание необъяснимой ошибки «попытка вызвать значение nil»). –

+0

Я вижу серьезную проблему безопасности здесь, json и подходящий синтаксический анализатор или подобный метод для синтаксиса, подобного lua, будут правильным путем. – dualed

2

Как и в случае с Lua 5.2, нагрузка поддерживает строки в качестве аргументов. Итак, теперь вы можете использовать ответ Адама выше, заменив loadstring на загрузку.

Обратите внимание, что load(eventData) создает кусок типа «функция», а load(eventData)() создает кусок и вызывает его, тем самым создавая вашу таблицу. Это помогло мне немного разобраться.

Смежные вопросы