Chủ đề nói tất cả. Tôi muốn biết nếu thông dịch viên máy chủ của tôi đang chạy Lua 5.2 hoặc 5.1Trong Lua, có chức năng nào sẽ cho tôi biết phiên bản hiện tại tôi đang chạy không?
Trả lời
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
_VERSION
giữ phiên bản thông dịch viên. Kiểm tra manual để tham khảo.
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ể.
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
@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 :-) –
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). –
Ah ... có một biến toàn cầu được gọi là _VERSION: – henryaz