Lua 에서 대상 지향 인 스 턴 스 구현

여기 서 Lua 에서 OO 를 실현 하 는 방안 을 제공 합 니 다.
 
local _class={}
 
function class(super)
	local class_type={}
	class_type.ctor=false
	class_type.super=super
	class_type.new=function(...) 
			local obj={}
			do
				local create
				create = function(c,...)
					if c.super then
						create(c.super,...)
					end
					if c.ctor then
						c.ctor(obj,...)
					end
				end
 
				create(class_type,...)
			end
			setmetatable(obj,{ __index=_class[class_type] })
			return obj
		end
	local vtbl={}
	_class[class_type]=vtbl
 
	setmetatable(class_type,{__newindex=
		function(t,k,v)
			vtbl[k]=v
		end
	})
 
	if super then
		setmetatable(vtbl,{__index=
			function(t,k)
				local ret=_class[super][k]
				vtbl[k]=ret
				return ret
			end
		})
	end
 
	return class_type
end

 
 
이제 어떻게 사용 하 는 지 봅 시다.
 
base_type=class()		--        base_type
 
function base_type:ctor(x)	--    base_type      
	print("base_type ctor")
	self.x=x
end
 
function base_type:print_x()	--          base_type:print_x
	print(self.x)
end
 
function base_type:hello()	--           base_type:hello
	print("hello base_type")
end

 
이상 은 기본 적 인 class 정의 문법 으로 lua 의 프로 그래 밍 습관 을 완전히 호 환 합 니 다.나 는 구조 함수 의 이름 으로 ctor 라 는 단 어 를 추가 했다.다음은 어떻게 계승 하 는 지:
 
test=class(base_type)	--       test     base_type
 
function test:ctor()	--    test      
	print("test ctor")
end
 
function test:hello()	--    base_type:hello   test:hello
	print("hello test")
end

 
이제 한번 해 보 세 요.
a=test.new(1)	--     ,base_type ctor   test ctor 。           。
a:print_x()	--    1 ,      base_type       。
a:hello()	--    hello test ,        。 
 
 
 

좋은 웹페이지 즐겨찾기