Lua多重继承代码实例

local function search(k, plist)
	for i, v in pairs(plist) do
		local temp_v = v[k]
		if temp_v then
			return temp_v
		end
	end
end

function createClass(...)
	local c = {}
	local parents = {...}

	--父类列表中搜索方法
	setmetatable(c, { __index = function(t, k) return search(k, parents) end } )
	c.__index = c

	--定义一个新的构造函数
	function c:new(o)
		o = o or {}
		setmetatable(o, c)
		return o
	end
	return c
end

Named = {}

function Named:getname()
	return self.name
end

function Named:setname(n)
	self.name = n
end

local NamedAccount = createClass(Account, Named)
account = NamedAccount:new({name = "Paul"})
print(account:getname())
(0)

相关推荐

  • Lua面向对象之多重继承、私密性详解

    在Lua中的多重继承和私密性可能用得比较少,也可能只是我个人用得比较少. 本来想偷懒不写这文章的,因为我今天刚买了个漂移板,连起步都还没学会啊,想多学一会. 咳咳,本着坚持不懈.负责到底的态度,我还是决定随便写几句~(小若:随便写几句是几吨意思啊?!) 1.多重继承之在多个类中查找一个字段 我发现这些高(shen)智(jing)商(bing)人群真的很厉害,这种技巧都能想到,很佩服. 其实多重继承没什么特别的,除非两个将要被继承的类有相同的函数名和属性,否则,处理起来很简单.   无非就是在多个

  • Lua多重继承代码实例

    local function search(k, plist) for i, v in pairs(plist) do local temp_v = v[k] if temp_v then return temp_v end end end function createClass(...) local c = {} local parents = {...} --父类列表中搜索方法 setmetatable(c, { __index = function(t, k) return search

  • C++与Lua交互原理实例详解

    首先,不同语言交互,我们一般把这种编程方式称为混合编程.开发中为什么要多语言混合使用,只用c++不行吗?答案是因为脚本语言语法糖多使用方便.沙盒式安全机制使系统更稳定.简单易学降低开发成本等,那么,只用脚本不行吗?那也是不合理的,因为与系统api的接口.计算密集性模块的性能要求等是脚本语言不擅长的,这一部份仍然需要c/c++来完成.因此,为了综合各自的优势,就出现了混合编程的需要. 那么,在一个程序的生命周期里,具体哪些部份c++写,哪些部份是脚本写?它们的交互接口又在哪里?一般与系统紧密相关的

  • Java编程实现从尾到头打印链表代码实例

    问题描述:输入一个链表的头结点,从尾巴到头反过来打印出每个结点的值. 首先定义链表结点 public class ListNode { int val; ListNode next = null; ListNode(int val){ this.val = val; } } 思路1:此题明显想到是利用栈的思想,后进先出,先遍历链表,依次将结点值进栈.最后在遍历栈出栈. public static Stack<Integer> printListReverse_Stack(ListNode li

  • Java探索之Thread+IO文件的加密解密代码实例

    这篇文章向大家分享了几段代码,主要是关于Thread+IO文件的加密解密,下面看看具体代码: 加密启动线程 package com.hz.subsection; import java.io.File; public class enCodeFileThread extends Thread { public Files files; public File file; public File dst; public enCodeFileThread(String name,Files file

  • oracle横向纵向求和代码实例

    有一张工资表SALARY如下, (NO 员工编号 ,MONEY 工资) NO    NAME     ITEM       MONEY 001    张三        工资        80 001    张三        补贴        86 001    张三        奖金        75 002    李四        工资        78 002    李四        补贴        85 002    李四        奖金        78 求每

  • Angular directive递归实现目录树结构代码实例

    整理文档,搜刮出一个Angular directive递归实现目录树结构代码实例代码,稍微整理精简一下做下分享. 效果图: 重点: 1. 整棵目录树的实现,通过嵌套完成,主要在于对treeItem.html的递归使用 <script type="text/ng-template" id="treeView.html"> <ul> <li ng-repeat="item in treeData.children" ng

  • php使用百度ping服务代码实例

    代码实例: <?php function postUrl($url, $postvar) { $ch = curl_init(); $headers = array( "POST".$url."HTTP/1.0", "Content-type: text/xml; charset=\"gb2312\"", "Accept: text/xml", "Content-length: "

  • JavaScript删除指定子元素代码实例

    原生javascript删除指定子元素代码实例: 本章节介绍一下如何利用原生javascript实现删除指定子元素. 大家都知道使用jquery实现此功能更为方便,不过使用原生的javascript也不麻烦,下面做一下介绍. 关于jquery如何实现此功能可以参阅jquery删除指定子元素代码实例一章节. 代码实例: 复制代码 代码如下: <!DOCTYPE HTML> <html> <meta charset="utf-8"> <title&

  • 修改或扩展jQuery原生方法的代码实例

    修改或者扩展jQuery的方法代码实例: 毫无疑问,jQuery是一款功能强大且使用方便的类库. 从它的广泛应用可以证实上面的观点,但是正所谓人无完人,金无足赤,jQuery也是如此,并非在任何时候或者场合都能够完美的完成我们的任务,所以有事以后就需要对jQuery原有的方法进行扩展修改,但是最好方法仍然具有原来的功能. 代码实例: 复制代码 代码如下: <!DOCTYPE html> <html> <head> <meta charset=" utf-

  • jQuery实现拖动调整表格单元格大小的代码实例

    jQuery实现的拖动调整表格td单元格的大小: 在实际应用中,可能有这样的需求,那就是需要调整td单元格的大小. 也许是为了便于观察,也许是其他原因,反正这样的需求是有的,下面就分享一段能够实现此功能的代码. 代码实例如下: 复制代码 代码如下: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <title>我们</title> <style ty

随机推荐