2015-01-16 4 views
2

제목에서 말한 것처럼 좌표 쌍 (x, y)을 테이블의 키로 사용하려고합니다. 여기까지 내가 한 일이있다.좌표 쌍을 Lua 테이블의 키로 사용하기

local test = {_props = {}} 
local mt = {} 
local xMax = 5 
local yMax = 5 

local function coord2index(x, y) 
    return ((x-1) * xMax) + y 
end 

mt.__index = function(s, k) 
    if s._props[coord2index(k[1], k[2])] ~= nil then 
     return s._props[coord2index(k[1], k[2])] 
    end 
end 

mt.__newindex = function(s, k, v) 
    s._props[coord2index(k[1], k[2])] = v 
end 
mt.__call = function (t, k) 
    if type(k) == "table" then print "Table" end 
end 

setmetatable(test, mt) 

test[{1,2}] = 5 
print(test[{1,2}]) 

이것은 실제로 예상대로 작동하고있다. 이 문제를 더욱 줄이는 방법이 있다면 test[1,2] = 5print(test[1,1])과 같은 것입니다. 이것에 대한 기술적 인 필요는 없습니다. 루아에 대한 나의 순교를위한 것입니다.

답변

1

귀하의 방법이 좋다고 생각합니다. 숫자 대신 문자열을 사용할 수도 있으며 과 같은 기능을 coord2index 함수에서 수행 할 수 있습니다.

+0

아마도 내가 당신을 오해하고 있습니다.하지만 따옴표로 대괄호를 바꿀 수는 없습니까? 만약 당신이'test [ "1,2"] = 5'와'print (test [ "1,2"])와 같은 것을 당신이 제안했다는 것을 이해한다면? 또는 나는 무언가가 빽빽하고 놓치고 있는가? – Timbermar

+0

예, 귀하의 경우 1과 2는 변수입니다. 물론 (사용자로서)'test [a .. ';'.. b]'라고 쓸 수는 있지만 이것은 구현 세부 사항을 사용자에게 노출시킵니다. 구현시 이러한 세부 정보가 숨겨져 동일한 메커니즘 (키의 다른 형식)을 사용하는 것이 좋습니다. –

+0

루아 5.3 정수로이 코드는 이상한 결과를 초래할 수 있습니다 :) – moteus

관련 문제