[Lua]索引极致,form.lua

local form = {_tag = ‘form‘}
function form.build(tag, super)
    local target = {
        _tag = tag,
        _super = super
    }
    form.spec(target)
    setmetatable(target, form._meta())
    return target
end

function form.on(target, spec)
    local tar = {}
    for k,v in pairs(spec) do
        if type(v) == ‘function‘ then
            local method = target[k] or spec[k]
            tar[k] = function ( ... )
                method(target, ...)
            end
        else
            tar[k] = v
        end
    end
    return tar
end

function form.spec(target)
    target.tag = target.tag or form.tag
    function target:on(target)
        local tar = {}
        local spec = self
        for k,v in pairs(spec) do
            if type(v) == ‘function‘ then
                tar[k] = function ( ... )
                    spec[k](target, ...)
                end
            else
                tar[k] = v
            end
        end
        print(target:tag()..‘[‘..spec._tag..‘] target binding form produced‘)
        -- no such key binding to the target
        tar.on = nil
        tar.spec = nil
        return tar
    end
    function target:spec(prop, target)
        if  self._interface == nil then
            self._interface = {}
        end
        local handler = {}
        function handler.string(self, prop, target)
            if target ~= nil then
                print(self:tag()..‘[‘..prop..‘] setter/getter produced‘)
                local property = ‘_‘..prop
                local function prop_(self, target)
                    if target ~= nil then
                        self[property] = target
                        return self
                    end
                    return self[property]
                end
                prop_(self, target)[prop] = prop_
            end
            local spec = self[prop](self)
            return spec and spec:on(self)
        end
        function handler.table(self, prop)
            local target = prop
            table.insert(self._interface, target)
            if type(target._tag)==‘string‘ then
                print(self:tag()..‘ interface[‘..target._tag..‘] specified‘)
            end
            return self
        end
        local handler_prop = handler[type(prop)]
        return handler_prop and handler_prop(self, prop, target)
    end
    return target
end

function form:tag()
    local tag = self._tag
    if type(tag)==‘string‘
    then
        return ‘*‘..tag..‘*‘
    end
    return ‘none.TAG‘
end

function form._meta()
    local meta = {}
    function meta.__index(target, key)
        -- avoid target._interface rise to C stack overflow, .etc
        -- following anonymous table specify the key filters
        if ({_interface = true, _super = true})[key] then return nil end

        local super = target._super
        local interface = target._interface
        local v = super and super[key]
        if v == nil and type(interface)==‘table‘
        then
            for i=1, #interface do
                v = interface[i][key]
                if v ~= nil then return v end
            end
        end
        return v
    end
    return meta
end

return form
时间: 2024-11-06 15:38:51

[Lua]索引极致,form.lua的相关文章

Lua脚本编程:Lua语言入门

Lua是一门简单而强大的语言,其本身强大的扩展性使得这门语言在游戏设计等领域发挥着重要的作用.博主曾在Unity3D中使用过这门语言,并且针对Lua和Unity.C++等方面的内容进行了学习和讨论.最近因为在[游戏脚本高级编程]这本书中详细介绍了Lua脚本的相关内容,因此在这里记录下博主的读书心得,方便以后在需要的时候查阅. Lua系统构成 Lua系统由Lua链接库.Luac编译器.Lua解释器三部分构成. * Lua链接库主要由lua.lib和lua.h这两个文件组成.Lua链接库主要负责对自

【Lua】linux下lua+mod_lwt环境搭建

Lua 是一个小巧的脚本语言.它具有轻量级.可扩展等优势.它可以作为一个强大.轻量的脚本语言,供任何需要的程序使用. LWT (Lua Web Tools) 可让你使用 Lua 开发 Web 应用,并可直接在 Apache 上运行.LWT 的核心功能通过一个 Apache 的模块(mod_lwt)来提供.另外 LWT 提供可选的 Lua 模块用来访问数据库和缓存. 现在用lua + LWT来搭建后台web环境. 安装lua: 在linux中,有两种方法可以安装lua. 第一种:系统为Ubunut

Lua - 决定开始分析Lua的源代码

lmathlib.c, lstrlib.c: get familiar with the external C API. Don't bother with the pattern matcher though. Just the easy functions. lapi.c: Check how the API is implemented internally. Only skim this to get a feeling for the code. Cross-reference to

lua脚本之lua语言简介以及lua的安装

本博主不擅于进行文字创作,所以,相当一部分文字皆复制于其他博文.还希望能够得到谅解.  一.Lua语言简介 Lua是一个免费的开源软件,可以免费用于科研及商业.Lua具有一个专家团队在维护和升级,其设计旨在项目中扩展功能,因此其内核小而稳定.在游戏开发中,Lua在用户界面.游戏数据管理.实时游戏事件管理.游戏人工智能.创建功能原型等方面具有强大的支持.Lua不能直接访问数据库,但可以通过整合其他语言组件来访问数据库:对于一些耗时要求更高效率的工作,一般交给更加底层的语言去完成,Lua只是起到整合

在C++使用LUA交互,LUA实现闭包,C++/LUA相互闭包

LUA可谓是配置文件神器,具体功能用过才知道,接近两年没用了抽了俩小时熟悉了下基本的用法. 包括C/LUA堆栈操作 函数相互调用 以及LUA的闭包 C++和LUA相互闭包 想要灵活使用LUA必须先要学习 LUA和C的堆栈交互模型 类似于汇编函数调用方式了 很有意思. 要学习LUA首先要理解LUA和C/C++交互的堆栈lua_State  这里引用网友的一篇文章很详细 http://wind-catalpa.blog.163.com/blog/static/11475354320131191031

Cocos2d-x Lua游戏开发之Lua oo 的实现

一些面向对象的语言中提供了类的概念,作为创建对象的模版.在这些 语言里面.对象是类的实例,lua通过table也可以实现类的使用. --建立父类Animal Animal = { size,--动物大小 成员变量声明,不赋值为nil age,--动物年龄 color = "yellow",--动物颜色 sex,--动物性别,这个可以有?? new = function ( self,object ) object = object or {}--判断object是否为空,nil就会创建

[Lua快速了解一下]Lua运行

-Lua的Hello World print("Hello World") 分号可选 -类似python,进入Lua后再shell中打命令执行语句也可 > print("Hello, World") Hello, World > -将脚本存成文件,用如下命令行运行 >lua file.lua -或者是像shell一样运行 chenhao-air:lua chenhao$ cat hello.lua #!/usr/local/bin/lua prin

Lua Profiler——快速定位Lua性能问题

导读 随着Lua在项目中的大量使用,它所带来的性能问题也逐步成为了项目运行时的重大性能瓶颈之一.特别是内存相关的性能问题,无论是内存分配过大还是内存泄露无法回收,目前都已经在不少研发项目中集中爆发. UWA推出的GOT Online中的Lua模式已经慢慢成为研发团队对Lua进行日常性能监控的有效手段.因此,也有越来越多的团队反馈,在监控到table数持续上涨,引用Mono对象持续增多等等问题时,应该如何快速地解决? 本次博物纳新推荐的开源库项目:LuaProfiler-For-Unity,相信可

lua三底漆:lua转让c/c++库(动态链接模式)

dll按功能luaL_openlib出口,然后lua使用package.loadlib导入库函数,基本就是这么个过程,以下上代码来说明一切. #include "stdafx.h" #ifdef __cplusplus extern "C"{ #endif #include "lua.h" #include "lualib.h" #include "lauxlib.h" #ifdef __cplusplus