博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
apolloxlua 源码内使用macros
阅读量:6000 次
发布时间:2019-06-20

本文共 2182 字,大约阅读时间需要 7 分钟。

hot3.png

本文讲解如何在两种模式下使用macros,首先在apolloxlua下有两种模式, 一种是 web模式另一种是工具模式。 web模式下我们可以在浏览器端来使用,但是有一些限制, 就是比如说某些native的api是无法使用的, 比如说ngx,redis,mysql这种。示例请看 。而另外一种工具模式, 工具模式没有使用限制。

我们在处理某个领域的问题时候, 会用到条件编译。 条件编译会减少我们代码的体积和增加程序的灵活性。 比如这个示例中展示了如何使用:

macros 宏使用的语法:

1 宏注释

{% if  SCRIPT  == "lua" then %}     return exports.GetValueByType (eax.value);{% end %}{% if  SCRIPT  == "neko" then %}     return exports.GetValueByType (eax.value);{% end %}{% if  SCRIPT  == "c" then %}     return exports.GetValueByType (eax.value);{% end %}

2 inline macro

{-inline_listense-}     Copyright (c) 2018 agent.zy@aliyun.com {-inline_listense-}

在代码中内联该语法会将不同的inline macro 输出到指定位置

3 函数定义

{%       local lua\_member\_call    ="{
{item}}:{
{item1}}({
{item2}})" local lua\_string\_add_val ="\\"{
{item}}\\" .. {
{item2}}" local lua\_string\_add_string ="\\"{
{item}}\\" + \\"{
{item2**}}\\"" %}

4 内联函数

{-inline_max-}function  max (a, b) {return a>b;}{-inline_max-}

如何使用我们定义的内联函数

{

blocks.inline_max}

5 替换模式

{% local string_macro ="\\"{
{item}}\\""%}{\* MACRO(string_macro)(context) *}{\* MACRO(string_macro){ item = "string-macro-context" } *}

例子 :

{-inline\_esprima\_parse-}    var options = {        attachComment: false,        range: false,        loc: false,        sourceType: "script",        tolerant: true    };    options.tokens = false;    var result = exports.esprima.parse(buff, options);{-inline\_esprima\_parse-}//  生成code /{-inline\_generate\_code-} exports.lexerGenerateCode(result);{-inline\_generate\_code-}   生成字节码{-inline\_generate\_mid-} exports.lexerGenerateMidCode(result);{-inline\_generate\_mid-}{% if  SCRIPT  == "lua" then %}exports.Main = function (buff) {    {% if  DEBUG  then %}        console.log("lua mode.")    {% end %}    ///生成ast解析    {\*blocks.inline\_esprima\_parse\*}     ///生成code    {\*blocks.inline\_generate\_code\*}       }{% end %}{% if  SCRIPT  == "c" then %}exports.Main = function (str) {    {% if  DEBUG  then %}        console.log("c mode.")    {% end %}    {\*blocks.inline\_esprima\_parse\*}    {\*blocks.inline\_generate\_code\*} }{% end %}

最后在使用的时候, web模式不需要处理, 在tool模式下请使用 进行预编译。

转载于:https://my.oschina.net/littlemonkeyc/blog/1925092

你可能感兴趣的文章
非、半、结构化数据学习【转载】
查看>>
SpringMVC之单/多文件上传
查看>>
cache-fusion笔记
查看>>
改变div属性的一个实例
查看>>
avalon加载一闪而过现象
查看>>
线段树模板【数据结构 - 线段树】
查看>>
Castle IOC概念理解
查看>>
如何配置Log4Net使用Oracle数据库记录日志
查看>>
一道在知乎很火的 Java 题——如何输出 ab【转】
查看>>
Python学习第二天-编写购物车
查看>>
AD域组策略-只显示指定的控制面板选项配置方法
查看>>
BigTable——针对结构型数据的一种分布式存储系统
查看>>
ip通信基础第二周回顾
查看>>
唯美MACD-完全版
查看>>
Canvas中 drawImage绘制图片不显示
查看>>
MyEclipse新建Server项目
查看>>
字符串问题分析方法
查看>>
Magento错误处理
查看>>
茵茵的第一课
查看>>
Linux实战教学笔记53:开源虚拟化KVM(一)搭建部署与概述
查看>>