루아의 게터
8124 단어 lua
__index
라는 필드가 있는지 확인하십시오.__index
자체가 테이블인 경우 해당 테이블에서 키를 찾습니다. __index
가 함수인 경우 테이블과 키를 사용하여 호출합니다. 따라서 getter를 구현하는 방법은 다음과 같습니다.
__index
메서드를 구현합니다.get_
접두사가 있는 키가 있는지 확인하고 호출합니다. 예시:
Complex = { mt = {}, prototype = {} }
Complex.mt.prototype = Complex.prototype
function Complex.mt.__index(table, key)
local prototype = getmetatable(table).prototype
local inProtoType = prototype[key]
if inProtoType ~= nil then return inProtoType end
local getterKey = "get_" .. key
local getter = prototype[getterKey]
if getter ~= nil then return getter(table) end
return nil
end
function Complex:new(o)
o = o or {}
local result = {}
result.re = o.re or 0
result.im = o.im or 0
setmetatable(result, self.mt)
return result
end
function Complex.mt:__tostring()
return "Complex(" .. self.re .. " + " .. self.im .. "i)"
end
function Complex.mt:__add(o)
o = o or {}
local re = o.re or 0
local im = o.im or 0
return Complex:new { re = self.re + re, im = self.im + im }
end
function Complex.prototype:get_magnitude()
return math.sqrt(self.re ^ 2 + self.im ^ 2)
end
local z = Complex:new { re = 1, im = 3 }
local w = Complex:new { re = 2, im = 1 }
print(z, w)
print(z + w)
print((z + w).magnitude)
산출:
Complex(1 + 3i) Complex(2 + 1i)
Complex(3 + 4i)
5.0
Reference
이 문제에 관하여(루아의 게터), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/mixusminimax/getters-in-lua-5547텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)