는 metatable에 약간의 문제가 있습니다. 이건 내 간단한 메타 테이블이다 :메타 테이블의 부분
mt.math:floor() return math.floor(self:get()) end
mt.effect:show(args) onMapShowEffect(self:get(), {x = x + (args[1] ~= nil or 0), ...) end
mt.effect:get() return getCurrentPos() end
어떤 아이디어 : 각자가 같은 몇 가지 자신의 방법이있다
mt.math
mt.effect
:
local mt = {}
function mt:add(n)
return setmetatable({n = n}, {__index = mt})
end
function mt:get() return self.n end
지금은 같은 일부 부문을 추가 할
?확인을 클릭하여 내 세부 사항을 공유하십시오. 코드 위
Player = {}
function Player:add(this)
return setmetatable({this = this}, {__index = Player})
end
Player:get() return self.this end
는
function enterToGame(player1, player2)
local p1 = Player:add(player1)
local p2 = Player:add(player2)
print(p1:get()) -- ID1
print(p2:get()) -- ID2
가 지금은 테이블 플레이어에 대한 몇 가지 유용하게 방법 (함수)를 만들려면이 예에서 완벽하게 작동합니다. 좀 더 유연하게 만들고 싶기 때문에 수업을 위해 나누고 싶습니다. 예 :
Player.info = {
id = function() return Player:get() end,
}
Player.pos = {
get = function() return getPosition(Player:get()) end,
set = function(args) setPosition(Player:get(), args) end,
}
Player.speed = {
get = function() return getSpeed(Player:get()) end,
set = function(value) setSpeed(value) end,
improve = function(value) setSpeed(Player.speed.get() + value) end,
}
하지만 내가 원하는 것을 정확하게 작동하지 :
function enterToGame(player1, player2)
local p1 = Player:add(player1)
local p2 = Player:add(player2)
print(p1:get()) -- ID1
print(p2:get()) -- ID2
print(p1.info.id()) -- ID2 instead of ID1
print(p2.info.id()) -- ID2
내가 넣어
플레이어 : 수() 마지막 객체 선언의 반환 나의 방법이다. (MT)은 mt.math에 대한 메타 테이블이기 때문에
정확하게 이해할 수있을 지 모르겠지만 내부 함수에서'self'는'mt.math' /'mt.effect' 테이블이 될 것이고 최상위'mt' 테이블은 그렇지 않을 것입니다 그건 당신에게 명확하지 않았습니다. –
mt를 호출 할 수있는 방법이 있습니까? – Synchro
mt 테이블에'__call' 메타 메소드를 주면 호출 할 수 있습니다. 그래도 그게 당신의 질문에 어떻게 관련이 있는지 모르겠습니다. –