<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://mediawiki.zeropage.org/index.php?action=history&amp;feed=atom&amp;title=LUA_6</id>
	<title>LUA 6 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://mediawiki.zeropage.org/index.php?action=history&amp;feed=atom&amp;title=LUA_6"/>
	<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=LUA_6&amp;action=history"/>
	<updated>2026-05-15T01:36:57Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.8</generator>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=LUA_6&amp;diff=34062&amp;oldid=prev</id>
		<title>imported&gt;fnwinter at 15:29, 26 February 2012</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=LUA_6&amp;diff=34062&amp;oldid=prev"/>
		<updated>2012-02-26T15:29:46Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;# 메타 테이블&lt;br /&gt;
&lt;br /&gt;
 메타 테이블은 루아에서 테이블을 사용하는 연산자 재정의? 또는 python을 예로 들면 __add__, __sub__ 와 같은 함수라고 볼 수 있습니다. 테이블을 함수가 아닌 연산자로 조작 할 수 있게끔 해 줍니다.&lt;br /&gt;
&lt;br /&gt;
: x = { value = 3 }  -- x라는 테이블을 만듬&lt;br /&gt;
: mt = { __add = function(a,b) return { value = a.value + b.value } end } -- &amp;#039;+&amp;#039; 연산자에 대한 metatable을 작성&lt;br /&gt;
: setmetatable(x,mt) -- x라는 테이블에 mt를 연결&lt;br /&gt;
: double = x + x -- x 테이블에 &amp;#039;+&amp;#039; 연산을 하면 metatable이 수행되 덧셈 결과가 새로운 table로 반환 됨&lt;br /&gt;
: print(double.value) -- 새로운 테이블의 값을 출력&lt;br /&gt;
6&lt;br /&gt;
&lt;br /&gt;
메타 함수는 __add 연산자 이외에 아래와 같은 연산자들이 있습니다.&lt;br /&gt;
&lt;br /&gt;
__unm : Unary 연산자 예를 들면 -1 의 -와 같은 피 연산자가 하나 인 연산자를 위한 meta 함수&lt;br /&gt;
__add : + 연산자&lt;br /&gt;
__sub : - 연산자&lt;br /&gt;
__mul : * 연산자&lt;br /&gt;
__div : / 연산자&lt;br /&gt;
__pow : ^ 연산자&lt;br /&gt;
__concat .. : string 연결 연산자&lt;br /&gt;
__eq : == 조건 연산자 &lt;br /&gt;
__lt &amp;lt; , &amp;gt; less than 연산자&lt;br /&gt;
__le &amp;gt;=,&amp;lt;= less than or equal 연산자&lt;br /&gt;
&lt;br /&gt;
연산자 이외에 table에 대한 event 들도 연결할 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
: mt.__index = function(x,key)&lt;br /&gt;
: &amp;gt; if key == &amp;#039;copy_value&amp;#039; then return { value = x.value } end&lt;br /&gt;
: &amp;gt; end&lt;br /&gt;
: new = x.copy_value&lt;br /&gt;
: print(new.value)&lt;br /&gt;
3&lt;br /&gt;
&lt;br /&gt;
__newindex : 새로운 index가 추가 되었을 경우에 호출 되는 meta 함수&lt;br /&gt;
__metatable : metatable을 보호하기 위한 metatable 프로그램이 metatable을 수정하지 못하도록 하기 위해 재 정의 해주면 된다.&lt;br /&gt;
&lt;br /&gt;
# 메타 테이블을 이용한 클래스&lt;br /&gt;
&lt;br /&gt;
우선 간단한 함수를 table 안에 만들어 보겠습니다.&lt;br /&gt;
&lt;br /&gt;
: instance = { value = 0, set_value = function(self, value) self.value = value end }&lt;br /&gt;
: instance.set_value(10) ---- self 가 없어서 에러가 발생&lt;br /&gt;
stdin:1: attempt to index local &amp;#039;self&amp;#039; (a number value)&lt;br /&gt;
stack traceback:&lt;br /&gt;
        stdin:1: in function &amp;#039;set_value&amp;#039;&lt;br /&gt;
        stdin:1: in main chunk&lt;br /&gt;
        &amp;amp;#91;C&amp;amp;#93;: ?&lt;br /&gt;
: instance.set_value(instance,10) --- self에 자기 자신을 넣어서 OK&lt;br /&gt;
: print(instance.value)&lt;br /&gt;
10&lt;br /&gt;
: instance:set_value(20) --- &amp;#039;:&amp;#039;를 쓰면 self를 안써도 됨&lt;br /&gt;
: print(instance.value) &lt;br /&gt;
20&lt;br /&gt;
&lt;br /&gt;
콜론이 &amp;quot;:&amp;quot; 이 함수에서 사용 될 경우는 함수의 파라미터로 self를 생략하게 할 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
그럼 이제 class를 만들어 보겠습니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class를 만들기 위한 페이지 http://lua-users.org/wiki/YetAnotherClassImplementation 추가로 링크 넣었습니다.&lt;br /&gt;
&lt;br /&gt;
# 마무리&lt;br /&gt;
&lt;br /&gt;
테이블은 정말 루아에 있어서는 가장 중요한 자료 구조인 것 같다. 테이블이라는 단순한 구조를 이렇게 다양하게 변형 시키다니 신기하면서도 뭔가 독특한 구조에 재미를 느꼈다.&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>imported&gt;fnwinter</name></author>
	</entry>
</feed>