đối tượng Tạo (mà chỉ đơn giản là Bàn) là hoàn toàn khác với Lua. Ý tưởng cơ bản là tạo một bảng thông thường chứa các thuộc tính (hàm và giá trị) phổ biến cho tất cả các cá thể. Bảng này, tôi sẽ gọi CAT cho Bảng thuộc tính chung.
Nếu bạn tham chiếu thuộc tính trong bảng và Lua không thể tìm thấy thuộc tính này, có một cách để báo cho Lua biết nơi khác để tìm thuộc tính. Chúng tôi muốn Lua nhìn vào CAT cho các thuộc tính chung. Metatables trả lời nhu cầu đó. Thêm về cách hoạt động sau này.
Chúng tôi cũng cần các phương thức trong CAT để có thể sử dụng các giá trị mẫu. Tự câu trả lời cần. Khi bạn gọi hàm bảng (phương thức) theo cách này: tableName:methodName()
, Lua tự động đặt tham chiếu đến đối tượng bảng làm thông số đầu tiên. Tên của tham số này là tự. Mặc dù phương thức nằm trong CAT, bản thân nó sẽ tham chiếu tới bảng cá thể đối tượng cụ thể.
Giả sử chúng tôi có CAT được gọi là Ô tô.
metaCar = { __index = Car }
-- this table will be used as the metatable for all instances of Car
-- Lua will look in Car for attributes it can't find in the instance
Ví dụ:
-- instance table is called mustang
-- setmetatable(mustang, metaCar)
Đây là một chức năng mục đích chung là tạo các đối tượng dụ mới và đặt metatable cho nó. Nếu CAT có hàm khởi tạo (init), hàm này cũng được thực thi.
function newObj(metatable)
..obj = {} -- create new empty instance object
..setmetatable(obj, metatable) –- connect the metatable to it
..if obj.init then -- if the CAT has an init method, execute it
....obj:init()
..end
..return obj
end
Nguồn
2013-12-06 17:45:33
Tôi tìm thấy "hướng dẫn" này trên Lua [kế thừa] (http: // lua-users.org/wiki/InheritanceTutorial) đặc biệt khai sáng cùng với câu trả lời này. – Indolering
@Indolering Thanks. Tôi đặt liên kết của bạn trong câu trả lời. –