apolloxlua 源码内使用macros的使用方式

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

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

这里写图片描述

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模式下请使用 luadef工具 进行预编译。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值