2012-02-24 43 views
5

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.

+0

ok tôi figured it out: luaopen_base (m_L); cần phải được gọi sau khi lua_open() –

+0

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. –

+0

@ 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. –

Trả lời

6

Khi bạn đã tìm ra, bạn phải gọi luaopen_base để nhận print và các chức năng cơ sở khác. Sau đó, bạn cần phải gọi luaopen_string, luaopen_math, để có được các module cơ bản và chức năng trong Thay vì viết tất cả ra tay, có thể tải tất cả các chức năng cơ bản Lua cùng một lúc với luaL_openlibs:.

lua_State* m_L = luaL_newstate(); 
luaL_openlibs(m_L); 
Các vấn đề liên quan