Hỏi về metamethods trên Lua

Để có thể sử dụng được hết tất cả metamethods, người ta thường làm thế này:

local Class = {}
Class.__index = Class

Nhưng có điều em không hiểu là, tại sao làm thế thì mới có thể sử dụng hết được metamethods. Xin các bậc cao nhân giải thich giùm, cảm ơn :)))

Tự đọc thôi:
https://www.lua.org/pil/13.4.1.html

2 Likes

Em đọc rồi mà còn mơ mơ, hồ hồ. Mong ai giải thích rõ hơn được không ạ.

Ở đây viết rất rõ :slight_smile: http://lua-users.org/wiki/MetatableEvents
nếu “đối tượng” hiện tại ko có slot đó thì sẽ kích hoạt __index trong metatable của đối tượng ấy.

Không có câu Table._index = Table thì không có prototype.

Table.__index = Table
-- example
function Table:test()
    return #self
end

newtable = Table.new()
newtable:test()

Do đối tượng newtable không có slot "test" nên qua __index tìm được Table, nhưng self vẫn được bind vào newtable.

Cái này hơi hại não :slight_smile: http://lua.space/general/intro-to-metatables, đọc 1 hồi thì nó khá giống JS, nhưng Lua ngoài table và “túi method” còn có thêm metatable chứa metamethods (!)

4 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?