루아의 메타 테이블이 OOP에서 작동하는 방식을 배우고 있으며 lua-users의 객체 지향 튜토리얼에서 읽은 코드를 혼동합니다. 위키. 누군가 다음 질문을 설명하는 데 도움이 될 수 있습니까? 감사.setmetatable() 작동 방식과 lua의 링크 목록에 메타 테이블이 필요한 이유
질문 1 : 위키 설명 : 여기서 __call 메타 메서드가있는 클래스 테이블에 메타 테이블을 추가합니다.이 메타 테이블은 값이 함수처럼 호출 될 때 트리거됩니다. 클래스의 생성자를 호출하도록 만듭니다. 따라서 인스턴스를 만들 때 .new가 필요하지 않습니다.
(1) 예제에서 __call이 어떻게 호출되어 생성자가 호출 되었습니까?
(2) "cls"는 "MyClass"를 의미합니까?
setmetatable(MyClass, {
__call = function (cls, ...)
return cls.new(...)
end,
})
질문 2 : 다음 코드의 {}는 무엇을 의미합니까?
local MyClass = {}
MyClass.__index = MyClass
setmetatable(MyClass, {
__call = function (cls, ...)
return cls.new(...)
end,
})
function MyClass.new(init)
local self = setmetatable({}, MyClass)
self.value = init
return self
end
function MyClass:set_value(newval)
self.value = newval
end
function MyClass:get_value()
return self.value
end
local instance = MyClass(5)
-- do stuff with instance...
이 검색 쿼리에는 Lua 메타 테이블에 대한 정보가 있습니다. https://www.google.com/?gws_rd=ssl#q=lua+metatables –