实现专题提供实现的最新资讯内容,帮你更好的了解实现。
   为了可能的版权问题,特此说明《The design and implementation of a language for extendingapplications》版权属于原作者们,我翻译的此文档,网友最好加上原始链接再转载,但不强求,因为我不敢保证我翻译,表达的准确性,正确性。这只是用中文记录了当时对内容理解,同时也只翻译了我感兴趣的东西。有确实需要的人们可以去读原文进行自己的理解。
Lua中的table就是一种对象,但是如果直接使用仍然会存在大量的问题,见如下代码: 1 Account = {balance = 0} 2 function Account.withdraw(v) 3 Account.balance = Account.balance - v 4 end 5 --下面是测试调用函数 6 Account.withdraw(100.00)     在上面的w
代码是这样的: function split(s,p) a={} string.gsub(s,'[^'..p..']+',function(w) table.insert(a,w) end) return unpack(a) en string.gsub这个函数很有意思: 第一个参数是字符串, 第二个参数是模式识别pattern,类似于正则表达式,其中”[^p]+“表示识别不在p中出现的字符
在之前的面试遇到考用lua实现类的题目。现在就补补这块知识点。 我们都知道Lua中的table是一个对象。拥有状态,拥有self,拥有独立于创建者和创建地的生命周期。 一个类就是一个创建对象的模具。Lua没有类的概念,但我们可以模拟类。 我们首先看看元表和元方法。这两个东西和我们模拟类有关。 Lua 本身是函数式的语言,但借助 metatable (元表)这个强大的工具,Lua 实现操作符重载易如
以下内容只作本人学习笔记,内容会随着我对lua源码分析的深入慢慢修改,所以以下内容只作参考,并非100%正确。     脚本table中的元素在c中是分两个地方存放的,即数组与hash表。table中元素的位置也不是一直固定的,它会根据table被修改的情况动态改变。下面分两种情况说一下table的特点。     第一,先来看构造table时lua是怎么处理的。     如果构造table的时候指
在java中,很容易使用正则表达式将一个字符串分割,下面使用Lua实现spilt函数 方法一: local spilt=function (str,pattern) local ret={}; local _pattern= "[^"..pattern.. "]+"; for s in string.gfind(str,_pattern) do table.insert(ret,s
 lua中默认是没有c中的const常量的,在csdn上找到了一个使用setmetatable。参考http://www.voidcn.com/article/p-utbhwogc-bcy.html。主要原理就是重载__index方法(相当于get方法)和__newindex方法(相当于set方法)。但是他实现的是不支持表中有表的情况的。 下面是我修改后的代码: 1 function newCo
元表概念 Lua中,面向对向是用元表这种机制来实现的。元表是个很“道家”的机制,很深遂,很强大,里面有一些基本概念比较难理解透彻。不过,只有完全理解了元表,才能对Lua的面向对象使用自如,才能在写Lua代码的高级语法时游刃有余。 lua的metatable的官方解释, 1. 每个table和每个full user data都可以有自己的metatable,并可通过setmetatable和getm
http://www.2cto.com/kf/201402/280177.html lua语言中没有真正意义的面向对象,而是通过函数模拟面向对象。我们来看是怎么一步步演化的。 1. 基本的函数 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 People = {}   function People.sayHi()    print( "Hi, nic
(1)lua实现protobuf的简介 需要读者对google的protobuf有一定的了解。 Protocol buffers are a flexible, efficient, automated mechanism for serializing structured data – think XML, but smaller, faster, and simpler. You defin
简单工厂就是生产整个计算器,而工厂方法只生产计算器的一部分;原有的简单工厂可以生'+' '-' '*' '/' ; 但是如果添加新的部件'%',厂房就需要扩充、修改很可以会影响原来部件的正常生产,这就违背了 开放封闭原则;而工厂方法则不存在这个问题;我新开一个工厂专门生产'%'就可以了 Factory = {} Operation = {} function Factory:new(o)
Person = {} Decorator = {} function Person:new(o) o = o or {} setmetatable(o,self) self.__index = self return o; end function Person:Show() print("我是人")
--[[ 抽象主题(Subject)角色:主题角色把所有对观察考对象的引用保存在一个聚集里, 每个主题都可以有任何数量的观察者。抽象主题提供一个接口,可以增加和删除观察者对 象,主题角色又叫做抽象被观察者(Observable)角色,一般用一个抽象类或者一个接口 实现。 抽象观察者(Observer)角色:为所有的具体观察
introduction 工欲善其事,必先利其器。lua作为一门动态语言,虽然我已经习惯了使用print来进行代码调试,但是还是有很多童鞋觉得一款好用的调试器能更好的进行lua代码编写。所以在以前接手游戏的lua结合层之后,自然就需要提供一个debuger工具了。 我们只需要的是一个能快速进行lua代码调试的工具,所以不需要gdb那种额外复杂的功能,只需要提供几种简单的功能就行了,如下: c/co
首先我们需要的protobuf导出lua的工具https://github.com/sean-lin/protoc-gen-lua, 具体使用,编写自己的proto文件,使用protoc --lua_out=./ foo.proto 导出lua文件即可,导出lua文件的主要实现是在plugin下的protoc-gen-lua文件。本身此工具不支持proto的嵌套,比如有两个proto文件 basi
工作后,整个人已经比较松懈了。虽然一直在看lua的源码,但是一直是比较零碎的时间,没有系统的整理,所以还是收获不多。因为最近工作也不是很忙了,就想整理下lua的源码学习的笔记,加深下印象,并分享给大家。 先说下这系列bolg我会每周更新2-3篇,没有顺序的 这些文章都是自己的浅薄的理解,有什么错误,还请各位拍砖赐教。 1.关于c语言函数的声明 相信大家都知道接口的重要,在lua中,如果要调用c语言
--多重继承 --在tabel plist中查找K local function search(k,plist) for i=1,#plist do local v=plist[i][k] -- 取一个基类 if v then return v end end end function createClass
我们使用nginx贯穿了我们的网络,做前线web服务,代理,流量过滤。在某些情况下,我们已经扩充了nginx上我们自己的模块的核心C代码,但最近我们做了一个重大举措,与nginx结合使用lua 几乎全部用lua写的我们的一个项目是新的cloudflare WAF。这个我们另有博客。​http://blog.cloudflare.com/heuristics-and-rules-why-we-bui
这个模块:主要函数就是index2addr,理解我们知道怎么获取栈中的数据 static TValue *index2addr (lua_State *L, int idx) { CallInfo *ci = L->ci; if (idx > 0) {//返回L->ci->func 为栈基址的表元素中第idx 个对象 TValue *o = ci->func + idx;
在项目中遇到了自动寻路的需求,于是决定开始学习一下A星,对于A星我也没有深究,只能说是勉强搞定了需求,在这和大家分享一下,相互进步, A星有个公式 f(x) = g(x) + h(x) ,搞清楚这个公式就好办了,f(x)就是当前位置到下一个位置的总价值,g(x)表示实际价,这是说这一部分代价是确定的,h(x)表示估价值,就是说我从下一个位置到到终点的代价是未知的,所以叫估价值,如图中所示,黑色格子