2013-04-27 31 views

Trả lời

20

Có toàn cầu _VERSION biến (một chuỗi):

print(_VERSION) 

-- Output 
Lua 5.2 

UPD:
Các phương pháp khác để phân biệt giữa Phiên bản Lua:

if _ENV then 
    -- Lua 5.2 
else 
    -- Lua 5.1 
end 

if 9^33 == 27^22 then -- this check is valid for x86/x64 only 
    -- vanilla Lua 
else 
    -- LuaJIT 
end 
+1

Hãy cẩn thận - '_ENV' có thể được cố tình đặt thành' nil'. – finnw

+3

@finnw - Ngay cả 'math.pi' có thể được cố tình đặt thành' 3' :-) –

+0

Tôi nghĩ bạn có nghĩa là 'Lua 5.2 hoặc cao hơn', vì' Lua 5.3' cũng có biến toàn cục '_ENV'. – JeromeJ

3

_VERSION giữ phiên bản thông dịch viên. Kiểm tra manual để tham khảo.

2

Nếu bạn cũng cần chữ số thứ ba trong phiên bản Lua (không có sẵn trong _VERSION), bạn cần phải phân tích đầu ra của lệnh lua -v trên dòng lệnh.

Đối với các nền tảng hỗ trợ io.popen kịch bản này sẽ làm các trick, nhưng chỉ khi kịch bản được điều hành bởi người phiên dịch độc lập (không có trong chế độ tương tác) .IOW các arg bảng toàn cầu phải được xác định:

local i_min = 0 
while arg[ i_min ] do i_min = i_min - 1 end 
local lua_exe = arg[ i_min + 1 ] 

local command = lua_exe .. [[ -v 2>&1]] -- Windows-specific 
local fh = assert(io.popen(command)) 
local version = fh:read '*a' 
fh:close() 

-- use version in the code below 

print(version) 
print(version:match '(%d%.%d%.%d)') 

Lưu ý rằng lua -v viết trên stderr trên Windows (cho Linux tôi không biết), vì vậy command cho io.popen (mà chỉ chụp stdout) phải chuyển hướng stderr để stdout và cú pháp là nền tảng cụ thể.

+0

Chữ số thứ ba xác định lỗi khác nhau- sửa các bản phát hành mà không thay đổi chức năng. Có vẻ như vô nghĩa để kiểm tra chúng. – lhf

+0

@lhf nói chung tôi hoàn toàn đồng ý, nhưng đối với những nhu cầu đặc biệt đó là một mẹo hữu ích để biết. Ví dụ. nói rằng bạn muốn khám phá xem tập lệnh của bạn có được chạy bởi một thông dịch viên có một bản vá cụ thể được áp dụng hay không. Bạn có thể chạy tập lệnh trên hệ thống không thuộc quyền kiểm soát của mình, vì vậy bạn không biết liệu có phải một giải pháp mã phải được sử dụng hay không). Nhưng tôi thừa nhận nó là một chút về bên của nitpicker :-) –

+0

Trên Linux ''lua -v'' viết để' stdout' với Lua 5.2 nhưng để 'stderr' với Lua 5.1, nhưng kể từ cú pháp cho chuyển hướng là tương tự trong shell (Bourne), bạn có thể sử dụng cùng một chuỗi lệnh trên Linux và Windows (và gần như chắc chắn trên OS X). –

Các vấn đề liên quan