2016-06-17 4 views
0

나는 1 년 전에이 프로젝트를 진행하고있었습니다. 나는 그것을 되돌아 왔고, 이제는 오류를 던진다. "call field"서랍 "(테이블 값)"오류가 발생한다. 서랍 필드이상한 "호출 필드"서랍 "(테이블 값)"오류

local Renderer = {} 

local num_of_layers = 2 
local insert = table.insert 
local remove = table.remove 


function Renderer:create() 
    local render = {} 

    render.drawers = {} 
    for i = 0, num_of_layers do 
     render.drawers[i] = {} 
    end 

    function render:addRenderer(obj, layer) 
     local l = layer or 0 
     insert(self.drawers(l), i, obj) 
    end 

    return render 
end 

return Renderer 

입니다

이 그것이이 정확하지

local tlm = {} 

function tlm:load() 
    renderer:addRenderer(self) 
    gameloop:addLoop(self) 
end 
+0

는 대문자'Renderer'와 소문자'renderer' 및 기능'렌더러와 약간의 혼란 : create' 실제로 우리의 관점에서, 끝이 없습니다. 코드를 조금 더 명확하게 만들 수 있습니까? – user6245072

+0

또한 오류를 발견했습니다. 'drawers'는 실제로 테이블을 포함하는 테이블이지만,'renderer : addRenderer'의 인자로'l'을 넘겨 주도록합니다. 다시, 나는 네가하고 싶은 것을 이해할 수 없다. – user6245072

답변

0

호출되는 위치입니다 :

insert(self.drawers(l), obj) 

self.drawers 기능하지 않고, 테이블. 따라서 self.drawers(1)과 같은 함수 호출은 오류를 발생시킵니다. 당신은 성능 개선 표준 기능을 사용하여 인덱스 리터의 테이블 self.drawers에 요소를 삽입하고 싶다면

당신은 호출해야합니다 :

table.insert(self.drawers, i, obj) 

을 당신이 단순히 self.drawers[l] = obj을 작성할 수 있습니다 인덱스 리터의 값을 바꾸려면

http://www.lua.org/manual/5.3/manual.html#pdf-table.insert