Một câu hỏi rất cơ bản tôi đoán:luabind: Không thể gọi chức năng lua cơ bản như in, toString
CáC++ mã C, gọi lua trông như thế này:
lua_State* m_L;
m_L = lua_open();
luabind::open(m_L);
luaL_dofile(m_L, "test.lua");
try {
luabind::call_function<void>(m_L, "main");
} catch (luabind::error& e) {
std::string error = lua_tostring(e.state(), -1);
std::cout << error << std::endl;
}
lua_close(m_L);
tại test.lua có nội dung sau:
function main()
print "1"
end
Khi thực hiện tôi nhận được lỗi:
test.lua:2: attempt to call global 'print' (a nil value)
Vấn đề là gì? Nó có liên quan gì đến môi trường? Tôi nghĩ các chức năng như in được xác định trong môi trường toàn cầu. Tại sao nó không được tìm thấy sau đó?
Cảm ơn bạn rất nhiều.
ok tôi figured it out: luaopen_base (m_L); cần phải được gọi sau khi lua_open() –
bạn sẽ cần phải gọi luaopen_string (m_L), luaopen_math (m_L), vv để mở thư viện lua được xây dựng thích hợp, nếu bạn định sử dụng chúng. –
@ chris.schuette: Bạn nên trả lời câu hỏi của riêng mình và chấp nhận câu trả lời đó (do đó đánh dấu câu hỏi là đã hoàn thành) hoặc xóa câu hỏi. –