CharacterMeta = {}
CharacterMeta.__add = function(a, b)
return Character.new(a.name .. " " .. b.name, a.HP + b.HP)
end
CharacterMeta.__tostring = function(a)
return (a.name .. "\t" .. a.HP)
end
Character = {}
Character.new = function(name, HP)
local instance = {}
instance.name = name
instance.HP = HP
setmetatable(instance, CharacterMeta)
return instance
end
do
local heroine = Character.new("Marilyn", 10)
local hero = Character.new("Manson", 20)
print(tostring(heroine))
print(tostring(hero))
local hybrid = heroine + hero
print(tostring(hybrid))
end
Tuesday, May 15, 2012
Metatables and Metamethods
Metatable이란 Metamethod라는 함수들을 담고 있는 테이블을 말한다. Metatable이 table에 붙으면 그 테이블의 행동양식이 바뀐다. 예를 들어 보통의 테이블은 + 로 더하는 operation을 할 수 없지만, + 연산의 정의를 갖고 있는 메타테이블을 추가해줌으로써 + 연산을 가능하게 할 수 있다. 다음의 __add나 __tostring이 metamethod 인데 __add 라는 이름은 + operator 를 사용할 수 있는 특별한 키워드이고, __tostring 은 tostring(obj)의 형태로 쓸 수 있게 하는 특별한 키워드이다. 그러한 키워드들은 Metatable Events 에 정리되어 있다.
Labels:
Lua
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment