• [Lua]表驱动索引编程,form.lua


    form.interface

    local form = {_tag = 'form'}
    function form.build(tag, super)
    --[[
        -- form to produce the target with super functional table and integrating multi-interface implement feature
        -- produce a target and hold following feature
        target:spec(interface) -- integrating the interface feature
        target:spec(name, property) -- property holder
        target:on(other) -- binding feature to other target and produce a delegater
    --]]end
    
    function form.on(target, spec)
    --[[
        -- produce a delegater binding target feature with itself from spec, that the feature defined in spec
    --]]end
    
    function form.spec(target)
    --[[
        --attach a form feature to the target
    
        --if target builded from `form.build`
        function target:spec(interface)
            -- specify target reuse interface code
        end
        --following feature is flexible
        function target:spec(prop, target)
            -- specify target property initial value and produce getter/setter
            -- example
            -- target:spec('prop', property)
            -- target:prop() return the property
            -- target:prop(property) to set the property
            -- target:spec('feature', interface)
            -- target:spec('feature') return the interface delegater binding on the target
        end
    
        -- if target is a interface implementation of a certain specification
        local spec = target
        function spec:on(target)
            -- produce the interface delegater binding on the target from spec
        end
    --]]end

     查看实现代码:form.lua

    form.test

    local form = require('form')
    -- 接口定义
    local spec = {_tag = 'sepc'}
    function spec:Show(msg)
        print(self._tag..':Show(msg) not implemented')
    end
    function spec:Dependence(target)
        print(self._tag..':Dependence(target) not implemented')
    end
    function spec:noImplementation()
        print(self._tag..':noImplementation() not implemented')
    end
    -- 接口实现
    local port = form.build('spec', spec)
    print('
    port ###test start---------------------------')
    port:Show()
    port:Dependence()
    port:noImplementation()
    function port:Show(msg)
        print('port:Show(msg)...')
        print(msg)
    end
    print('
    overwrite port:Show(msg)--------------------')
    port:Show('port:Show using spec.Show')
    
    function port:Dependence(target)
        print('port:Dependence(target)...')
        target.Show('DI, Dependence Input; implementation binded on '..target._tag..' from port')
    end
    print('
    port ###test over---------------------------')
    
    
    -- 派生复用
    local target
        = form.build('target'--[[, port]]) -- 可从#super 派生复用
            :spec(port)-- 可指定接口形式复用
    
    print('
    target ###test start---------------------------')
    target:noImplementation() -- spec:noImplementation()
    target:Show('target:Show using port.Show') -- port:Show(msg)
    
    print('
    Depend on [port] implement---------------------')
    local tar_ = port:on(target)-- binding on target, implementation from port
    tar_.Show('tar_.Show()')
    print('
    target:Dependence(tar_) using port:Show(msg)---')
    target:Dependence(tar_) -- port:Dependence(target)
    
    print('
    overwrite target:Show(msg)---------------------')
    function target:Show(msg)
        print('target:Show(msg)...')
        print(msg)
    end
    print('
    target:Dependence(tar_) using port:Show(msg)----')
    target:Dependence(tar_)
    
    print('
    Depend on [target] implement--------------------')
    print('
    target:Dependence(tar_) using target:Show(msg)--')
    tar_ = form.on(target, port)-- using target implementation spec from port
    tar_.Show('tar_.Show()')
    target:Dependence(tar_)
    print('
    target ###test over-----------------------------')

     form.lua提供友好的lua协约式编程form,完整满足以下两点

    • 派生复用机制
    • 面向接口特性

    form.test 运行成功。后续将给出Lua协约式编程范例;基于form.lua实现通知订阅方式

  • 相关阅读:
    前端学习笔记系列一:5 在项目中引入阿里图标icon
    前端学习笔记系列一:3 Vue中的nextTick
    前端学习笔记系列一:4 vue中@click.native
    学习习惯
    美团作价27亿美元正式收购摩拜
    北京 一卡通 退卡
    愚人自以慧,智者自以愚。
    袁隆平分享8字成功经验
    性能计数器 叹号
    升级 windows 2016
  • 原文地址:https://www.cnblogs.com/qianwen36/p/5156275.html
Copyright © 2020-2023  润新知