1. λ©ν ν
μ΄λΈ
λ©ν ν
μ΄λΈμ 루μμμ ν
μ΄λΈμ μ¬μ©νλ μ°μ°μ μ¬μ μ? λλ pythonμ μλ‘ λ€λ©΄ add, sub μ κ°μ ν¨μλΌκ³ λ³Ό μ μμ΅λλ€. ν
μ΄λΈμ ν¨μκ° μλ μ°μ°μλ‘ μ‘°μ ν μ μκ²λ ν΄ μ€λλ€.
x = { value = 3 } -- xλΌλ ν μ΄λΈμ λ§λ¬6
mt = { __add = function(a,b) return { value = a.value + b.value } end } -- '+' μ°μ°μμ λν metatableμ μμ±
setmetatable(x,mt) -- xλΌλ ν μ΄λΈμ mtλ₯Ό μ°κ²°
double = x + x -- x ν μ΄λΈμ '+' μ°μ°μ νλ©΄ metatableμ΄ μνλ λ§μ κ²°κ³Όκ° μλ‘μ΄ tableλ‘ λ°ν λ¨
print(double.value) -- μλ‘μ΄ ν μ΄λΈμ κ°μ μΆλ ₯
λ©ν ν¨μλ __add μ°μ°μ μ΄μΈμ μλμ κ°μ μ°μ°μλ€μ΄ μμ΅λλ€.
__unm : Unary μ°μ°μ μλ₯Ό λ€λ©΄ -1 μ -μ κ°μ νΌ μ°μ°μκ° νλ μΈ μ°μ°μλ₯Ό μν meta ν¨μ
__add : + μ°μ°μ
__sub : - μ°μ°μ
__mul : * μ°μ°μ
__div : / μ°μ°μ
__pow : ^ μ°μ°μ
__concat .. : string μ°κ²° μ°μ°μ
__eq : == 쑰건 μ°μ°μ
__lt < , > less than μ°μ°μ
__le >=,<= less than or equal μ°μ°μ
__add : + μ°μ°μ
__sub : - μ°μ°μ
__mul : * μ°μ°μ
__div : / μ°μ°μ
__pow : ^ μ°μ°μ
__concat .. : string μ°κ²° μ°μ°μ
__eq : == 쑰건 μ°μ°μ
__lt < , > less than μ°μ°μ
__le >=,<= less than or equal μ°μ°μ
μ°μ°μ μ΄μΈμ tableμ λν event λ€λ μ°κ²°ν μ μμ΅λλ€.
mt.__index = function(x,key)3
if key == 'copy_value' then return { value = x.value } endnew = x.copy_value
end
print(new.value)
__newindex : μλ‘μ΄ indexκ° μΆκ° λμμ κ²½μ°μ νΈμΆ λλ meta ν¨μ
__metatable : metatableμ 보νΈνκΈ° μν metatable νλ‘κ·Έλ¨μ΄ metatableμ μμ νμ§ λͺ»νλλ‘ νκΈ° μν΄ μ¬ μ μ ν΄μ£Όλ©΄ λλ€.
__metatable : metatableμ 보νΈνκΈ° μν metatable νλ‘κ·Έλ¨μ΄ metatableμ μμ νμ§ λͺ»νλλ‘ νκΈ° μν΄ μ¬ μ μ ν΄μ£Όλ©΄ λλ€.
2. λ©ν ν
μ΄λΈμ μ΄μ©ν ν΄λμ€
μ°μ κ°λ¨ν ν¨μλ₯Ό table μμ λ§λ€μ΄ λ³΄κ² μ΅λλ€.
instance = { value = 0, set_value = function(self, value) self.value = value end }stdin:1: attempt to index local 'self' (a number value)
instance.set_value(10) ---- self κ° μμ΄μ μλ¬κ° λ°μ
stack traceback:
instance.set_value(instance,10) --- selfμ μκΈ° μμ μ λ£μ΄μ OK10
print(instance.value)
instance:set_value(20) --- ':'λ₯Ό μ°λ©΄ selfλ₯Ό μμ¨λ λ¨20
print(instance.value)
μ½λ‘ μ΄ ":" μ΄ ν¨μμμ μ¬μ© λ κ²½μ°λ ν¨μμ νλΌλ―Έν°λ‘ selfλ₯Ό μλ΅νκ² ν μ μμ΅λλ€.
κ·ΈλΌ μ΄μ classλ₯Ό λ§λ€μ΄ λ³΄κ² μ΅λλ€.
classλ₯Ό λ§λ€κΈ° μν νμ΄μ§ http://lua-users.org/wiki/YetAnotherClassImplementation μΆκ°λ‘ λ§ν¬ λ£μμ΅λλ€.
3. λ§λ¬΄λ¦¬
ν
μ΄λΈμ μ λ§ λ£¨μμ μμ΄μλ κ°μ₯ μ€μν μλ£ κ΅¬μ‘°μΈ κ² κ°λ€. ν
μ΄λΈμ΄λΌλ λ¨μν ꡬ쑰λ₯Ό μ΄λ κ² λ€μνκ² λ³ν μν€λ€λ μ κΈ°νλ©΄μλ λκ° λ
νΉν ꡬ쑰μ μ¬λ―Έλ₯Ό λκΌλ€.