Menu
CoddyTech

Tạo table và unpack()

Thuộc phần Logic và luồng chương trình trong hành trình Lua của Coddy. Bài học 6 trên 54.

Lua cung cấp một cặp kỹ thuật bổ trợ để làm việc với nhiều giá trị: tạo bảng và unpack(). Những kỹ thuật này đặc biệt hữu ích khi làm việc với các hàm cần xử lý đối số linh hoạt.Bạn có thể gom nhiều giá trị vào một bảng dạng danh sách bằng cú pháp khởi tạo bảng với dấu ngoặc nhọn. Cách này gom tất cả giá trị vào một cấu trúc bảng duy nhất.
local args = {10, 20, 30}
print(args[1])  -- Đầu ra: 10
print(#args)    -- Đầu ra: 3
The hàm (function) unpack() làm điều ngược lại. Hàm này nhận một bảng dạng danh sách và trả về tất cả phần tử dưới dạng các giá trị riêng biệt. Nhờ vậy, bạn có thể truyền nội dung của bảng làm các đối số riêng biệt cho một hàm.Quan trọng: Mặc dù các phiên bản Lua mới hơn (5.2+) đã chuyển hàm này sang table.unpack(), môi trường này chạy Lua 5.1, vì vậy bạn phải dùng hàm toàn cục unpack().
local numbers = {5, 10, 15}
print(unpack(numbers))  -- Đầu ra: 5    10    15
Những kỹ thuật này kết hợp với nhau một cách liền mạch. Bạn có thể thu thập các giá trị vào một bảng, thao tác với bảng rồi giải nén bảng thành các giá trị riêng lẻ.
challenge icon

Thử thách

Dễ

Viết một hàm forwardArguments nhận vào ba số a, b và c, rồi trả về tổng của chúng bằng cách tạo bảng và dùng unpack().

Tạo một bảng chứa ba đối số bằng cú pháp {a, b, c}, sau đó giải nén các giá trị và truyền chúng cho một hàm khác để tính tổng.

Lưu ý: Hãy dùng hàm toàn cục unpack() thay vì table.unpack() để đảm bảo tương thích với môi trường này.

Logic:

  • Dùng {a, b, c} để tạo một bảng chứa cả ba đối số
  • Tạo một hàm riêng tên là sum, nhận ba tham số và trả về tổng của chúng
  • Dùng unpack() để truyền các giá trị trong bảng cho hàm sum
  • Trả về kết quả từ hàm sum

Tham số:

  • a (số): Số thứ nhất
  • b (số): Số thứ hai
  • c (số): Số thứ ba

Giá trị trả về: Tổng của cả ba số (số)

Tự làm thử

function forwardArguments(a, b, c)
    -- Tạo một hàm (function) riêng để tính tổng

    -- Tạo một bảng chứa cả ba đối số (argument)

    -- Giải nén bảng và truyền các giá trị vào hàm tính tổng
    -- Gợi ý: Dùng hàm toàn cục 'unpack' để mở rộng các đối số trong bảng

end
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Logic và luồng chương trình

Tự luyện tập: Trình biên dịch Lua online