Không. Lua không có cách nào để biết tập lệnh có được gọi trực tiếp hay không.
Hãy nhớ rằng: Lua và Python tồn tại cho các mục đích khác nhau. Python được thiết kế cho kịch bản lệnh dòng lệnh. Bạn viết một kịch bản lệnh gọi các mô-đun có thể được viết bằng Python, C++ hoặc bất kỳ thứ gì. Kịch bản Python là cuối cùng những gì là phụ trách của mã được gọi là khi nào.
Lua là nhúng ngôn ngữ kịch bản, trước tiên và quan trọng nhất. Trong khi bạn chắc chắn có thể sử dụng trình thông dịch độc lập lua.exe
để tạo các tập lệnh dòng lệnh, đó là một thứ gì đó của một kludge. Mục đích chính của ngôn ngữ là được nhúng vào trong một số ứng dụng được viết bằng C, C++ hoặc bất kỳ thứ gì.
Vì lý do này, có không có khái niệm là về tập lệnh "chính". Làm thế nào bạn sẽ xác định những gì là "chính" và những gì không? Nếu mã C có thể tải bất kỳ tập lệnh nào vào bất kỳ lúc nào, cho bất kỳ mục đích nào, mã nào trong số đó là "chính"?
Nếu bạn muốn xác định khái niệm này, nó khá đơn giản. Chỉ cần dính này ở phía trên cùng của "chính" của bạn kịch bản:
do
local old_dofile = dofile
function new_dofile(...)
if(__is_main) then
__is_main = __is_main + 1
else
__is_main = 1
end
old_dofile(...)
__is_main = __is_main - 1
if(__is_main == 0) then __is_main = nil end
end
dofile = new_dofile
end
Cấp, điều này sẽ không làm việc cho bất cứ điều gì nạp với require
; bạn cũng cần phải viết phiên bản này cho require
. Và nó chắc chắn sẽ không hoạt động nếu mã bên ngoài sử dụng chức năng tải C-API (đó là lý do tại sao require
có thể sẽ không hoạt động).
Nguồn
2012-01-30 15:02:59
Bạn nói đúng, xin lỗi vì sự trùng lặp ... – Wookai