來源:鐘元大老爺 發(fā)布時(shí)間:2018-08-29 16:53:06 閱讀量:913
本文講解如何在兩種模式下使用macros,首先在apolloxlua下有兩種模式, 一種是 web模式另一種是工具模式。 web模式下我們可以在瀏覽器端來使用,但是有一些限制, 就是比如說某些native的api是無法使用的, 比如說ngx,redis,mysql這種。示例請看 web控制臺(tái)示例 。而另外一種工具模式, 工具模式?jīng)]有使用限制。
我們在處理某個(gè)領(lǐng)域的問題時(shí)候, 會(huì)用到條件編譯。 條件編譯會(huì)減少我們代碼的體積和增加程序的靈活性。 比如這個(gè)示例中展示了如何使用:

{% 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 %} {-inline_listense-}
Copyright (c) 2018 [email protected]
{-inline_listense-}在代碼中內(nèi)聯(lián)該語法會(huì)將不同的inline macro 輸出到指定位置
{%
local lua\_member\_call ="{{item}}:{{item1}}({{item2}})"
local lua\_string\_add_val ="\\"{{item}}\\" .. {{item2}}"
local lua\_string\_add_string ="\\"{{item}}\\" + \\"{{item2**}}\\""
%}{-inline_max-}function max (a, b) {return a>b;
}
{-inline_max-}如何使用我們定義的內(nèi)聯(lián)函數(shù)
{_blocks.inline_max_}
{%
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-}//////// 生成字節(jié)碼////{-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 %}最后在使用的時(shí)候, web模式不需要處理, 在tool模式下請使用 luadef工具 進(jìn)行預(yù)編譯。