实现专题提供实现的最新资讯内容,帮你更好的了解实现。
  lua的一个很大的优势是体积小,可以很方便的嵌入到其他的系统中,所以,它只设计了一种数据结构table供我们使用,但是由于其table实现的巧妙性,所以我们可以很方便的扩展出其他的数据结构,如数组,队列,字典等等  。 在lua中一个table分成数组段和hash段俩部分,从lua5.1的原码中可以很容易的看出来,数字作为key的一般是放在数组段的,string和当数字过于离散的时候,放在ha
从代码上说明 Account={balance=0}; --新建了一个对像,他有一个属性balance function Account:new(o) --这里的 :new(o) 中的冒号,代码可以省略self ,在访问的时候object:new(o) 如果是点号 :new(o) 就应改成 .new(self,o) 在访问的时候 object.(object,o) o= o or {}
    为了可能的版权问题,特此说明《The design and implementation of a language for extendingapplications》版权属于原作者们,我翻译的此文档,网友最好加上原始链接再转载,但不强求,因为我不敢保证我翻译,表达的准确性,正确性。这只是用中文记录了当时对内容理解,同时也只翻译了我感兴趣的东西。有确实需要的人们可以去读原文进行自己的理解
实现         扩展语言一般都是通过应用程序解释执行的。简单的扩展语言直接从源码解释执行,另一方面嵌入语言是编程语言,拥有复杂的语法(syntax)和语义(semantics)。         嵌入语言一个更有效的实现技术就是设计一个适合语言的虚拟机,将扩展程序编译为虚拟机的字节码,通过虚拟机仿真模拟解释字节码。(Betz 1988,1991;Franks 1991)。         我
           我们在使用lua的时候一定觉得这门语言很高级,什么都不用去处理而且速度很快,超过了一般的脚本语言,这是因为其实lua内部是由c来管理内存的分配和释放的,用起来有点像java的垃圾回收器一样,但完全不是一个东西,看过lua源码的人都知道,它是自己建立了一套lua内存管理机制的,由c语言完成真正的内存分配和释放。异同点只要看垃圾回收机制的三大要素就知道了。         今天我
参考luna代码.   #include "stdafx.h" extern "C" {      #include "lua.h"      #include "lauxlib.h"      #include "lualib.h" } #include <stdarg.h> #include <string.h> #include <conio.h>   class lua_A {      
不多说,发现lua的string没有提供split函数,只好写了个。 //创建部分 //基于源字符串,时间复杂度O(n),空间复杂度O(1) LUA_API int split(lua_State * L) { int n = 1; int pos = 0; const char * src = lua_tostring(L, 1); int len = strle
   干支纪日是现今历史上最长的纪日法,也是中国特有的历法,据考从伏羲氏就开始有创建,从中国古代的夏朝就已经开始使用。我国的干支纪日,从鲁隐公三年二月己巳日(公元前720年2月10日)开始,一直到今天,都未曾间断。     干支历采用六十甲子循环记载年月日时的信息,干支历的年月信息,与公历、农历的年不同,是以节气为根据的,就是根据地球与太阳的旋转角度精确计算的,干支历中,每年以立春作为开始,每月以
先来看看lua if语句最简单的用法: local n = 3 if n > 3 then n = 4 else n = 5 end 字节码 要分析lua如何通过词法(llex.c),语法(lparse.c),代码生成器(lcode.c)来解析上面这段代码,生成供虚拟机执行的字节码, 就得先知道这段lua代码最终究竟生成了什么模样的字节码。 先来一步步断点调试虚拟机的
一个lua的表函数要有类似C++类函数的this指针,在函数定义,和函数调用时都得使用冒号, 如 local tb = {scale=1} function tb:add(a, b) return self.scale + a + b end 调用方式: local result = tb:add(1, 3) 来看看函数声明的词法分析的过程, 遇到function token会进行f
这个类基本上是从LuaPlus那里弄来的,为什么不支持用LuaPlus,因为那东西我实在不知道怎么编译,能编译通过的版本的旧版本的了,而且之前的版本有BUG的存在,使用起来有阴影,不想用了,还是自己写个比较靠谱。 因为感觉LuaPlus那个LuaFunction有点不好用,所以进行了一些改造。自己认为目前自己封装的这个还是比较好用的。 namespace Lua_Wrapper{ struct L
看以下代码: for i=1,2 do print(i) i=3 end 输出是什么?如果习惯了C/C++语言,会觉得因为改变了控制变量i为3,所以在执行第二次循环体之前判断不通过,所以输出是1。 但结果输出是1和2,即虽然改变了i,但循环还是执行了2次。这是为什么呢? 看了lua的源代码,发现在语法分析阶段,表达式中的i(也叫控制变量)和循环体中的i并不是一个值,其实表达式中的i叫int
function reverse(s)     local r = ""     for i = #s, 1, -1 do         r = r .. string.sub(s, i, i)     end     return r end io.write("Input a string: ") s = io.read() io.write("The reverse string is:
function wash(a) local times = 52 local ranIndex = 0 local cIndex = 0 for i = 1,52 do    a[i] = i end for i = 1,times do    ranIndex = math.random(1,52)    cIndex = math.mod(i,53)    if cIndex ~= ranI
function func_(a,b,c) do    local a2 = 2*a    local d = math.sqrt(b^2 - 4*a*c)    x1 = (-b + d)/a2    x2 = (-b - d)/a2    return x1,x2 end            -- scope of 'a2' and 'd' ends here end print(func_
function maximum (a)     local mi = 1             -- maximum index     local m = a[mi]          -- maximum value     for i,val in ipairs(a) do        if val > m then            mi = i            m = v
这里是一个lua面向对象实现很简单的例子。 Acount = { balance = 0, withdraw = function(self ,v) self.balance = self.balance - v end } function Acount:deposit(v) self.balance = self.balance + v end function Acount:
OperationFactory = {} Operation = {} function Operation:new(o) o = o or {} setmetatable(o,self) self.__index = self o.NumberA = 0 o.NumberB = 1 return o end OperationAdd = Operation:new() Op
Strategy = {} ConcreteStrategyA = {} ConcreteStrategyB = {} ConcreteStrategyC = {} Context = {strategy = nil} function Strategy:new(o) o = o or {} setmetatable(o,self) self.__index = self ret
Person = {} Decorator = {} function Person:new(o) o = o or {} setmetatable(o,self) self.__index = self return o; end function Person:Show() print("我是人") end Decorator = Person:new{component =