zoukankan      html  css  js  c++  java
  • Cocos2d-x 脚本语言Lua中的面向对象

    Cocos2d-x 脚本语言Lua中的面向对象


    面向对象不是针对某一门语言,而是一种思想。在面向过程的语言也能够使用面向对象的思想来进行编程。

    在Lua中,并没有面向对象的概念存在,没有类的定义和子类的定义。但相同在Lua中能够利用面向对象的思想来实现面向对象的类继承。


    一、复制表的方式面向对象
    --Lua中的面向对象
    --[[
      复制表方式面向对象
      參数为一张表。通过遍历这张表取值,赋给一张空表,最后返回新建的表。来达到克隆表
    ]]
    function clone(tab)
    	local ins = {}
    	for key, var in pairs(tab) do
    		ins[key] = var
    	end
    	return ins
    end
    
    --[[
      复制表
      第一參数是目标表,第二个參数是须要复制的表
      通过遍历tab来取值将它赋值到目标表中
    ]]
    function copy(dist,tab)
    	for key, var in pairs(tab) do
    		dist[key] = var
    	end
    end
    
    -- 定义一张空表,相当于一个类
    People ={}
    
    --function People.sayHi()
    --	print("People say hi")
    --end
    
    -- 定义类中的方法sayHi,传入一个self參数
    People.sayHi = function (self)
    	print("People say hi:"..self.name)
    end
    
    -- 定义一个new方法,传进一个name參数,通过克隆People这张表来生成一个对象
    -- 相当于类其中的一个构造方法
    People.new = function (name)
    	local self = clone(People)
    	self.name = name
    	
    	return self
    end
    
    --local p = clone(People)
    --p.sayHi()
    --生成一个新的对象
    local p = People.new("ZhangSan")
    --p.sayHi(p)
    --p:sayHi()
    
    
    --定义一张空表,也代表一个类
    Man = {}
    --Man中的构造方法。实现Lua中类的继承
    Man.new = function (name)
    	local self = People.new(name)
    	--附加Man中全部的键值对到People中的实例中去
    	copy(self,Man)
    	return self
    end
    
    Man.sayHello = function ()
    	print("Man say hello")
    end
    
    --重写父类People中的sayHi方法
    Man.sayHi = function (self)
    	print("Man sayHi "..self.name)
    end
    
    --创建Man的一个实例
    local m = Man.new("Lisi")
    m:sayHi()
    
    
    
    

    以上代码已经有具体的凝视。读者须要细致阅读这里所给出的样例。

    二、使用函数闭包的形式实现面向对象
    --以函数闭包的形式实现面向对象
    
    --定义一个方法,函数闭包实现一个类的概念
    function People(name)
    	local self = {}
      --初始化方法,私有的
    	local function init()
    		self.name = name
    	end
      
    	self.sayHi = function ()
    		print("Hello "..self.name)
    	end
    
      --调用初始化
    	init()
    	return self
    end
    
    --实例化一个对象
    local p = People("ZhangSan")
    p:sayHi()
    
    --函数闭包的形式实现类继承
    function Man(name)
    	local self = People(name)
    	
    --	local function init()
    --		
    --	end
    
    	self.sayHello = function ()
    		print("Hi "..self.name)
    	end
    	
    	return self
    end
    
    
    local m = Man("Lisi")
    --m:sayHello()
    m:sayHi()
    

    以上两种方式均可实现面向对象。目測另外一种方法更为简洁一些,具体使用依照个人的喜好来做。









  • 相关阅读:
    Ansible facts
    K8S基础概念
    Ansible CMDB
    Docker 核心技术与实现原理
    如何在 Centos7 中使用阿里云的yum源
    一篇文全面了解DevOps:从概念、关键问题、兴起到实现需求
    关于操作stream流
    service not available now, maybe disk full, CL: 0.95 CQ: 0.95 INDEX: 0.95, maybe your broker mach
    AOP的底层实现,动态代理和cglib代理
    模拟浏览器加载静态资源
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5140406.html
Copyright © 2011-2022 走看看