天工维度魔兽争霸开发者社区-全国最大的TJ集中营-原提百万联盟

标题: YDWE自带Lua教程第二课:lua模板基础 [打印本页]

作者: 提百万    时间: 2019-7-8 12:21
标题: YDWE自带Lua教程第二课:lua模板基础
// 第二课,这次让我们忘掉物编读取吧,首先学习lua模版的使用。

function Test1 takes nothing returns nothing
    // 首先看个简单的
    local integer a = <?= 1+1 ?>
    // 可以看出,其实就是<?= ?>内的语句在地图保存的时候被执行了,其结果替换到原处

    local integer b = <?= math.max(2, 5) ?>
    // <?= ?>内的是lua语句,你可以用任何符合lua语法的表达式,具体可以参考lua的教程

    local string c = "<?= 1+2 ?>"
    // 即使是在字符串内使用 <?= ?>,也是可以的

    local string s = "<?= string.format('<%d> it is a string', math.max(2, 5)) ?>"
    // string.format是lua的一个内置函数,很实用,以后我们还会用到它
endfunction

function Test2 takes nothing returns nothing
    // 注意到<?= ?>的等号,其实<? ?>也是符合lua模版语法的符号
    // 记住它们之间的关系和区别
    //   <? ?> 内的语句在地图保存的时候被执行,不会产生任何结果在Jass代码里
    //   <?= ?>内的语句在地图保存的时候被执行,其结果替换到原处
    // 既然<? ?>不会产生结果,那么它有什么用呢,答案就是充当控制语句,接下来,
    // 你将会看到更多的lua语法

    <? local X = 1 ?>
    // 定义了一个lua的局部变量,可以看到这和Jass的定义方式很相似,唯一区别是在
    //    lua里我们不需要声明变量的类型

    local integer a = <?= X ?>
    // 然后我们可以在别的地方使用刚才定义的变量

    <? X = X + 1 ?>
    // 修改变量的值,和Jass的区别是,我们不需要写set了

    <?
        X = 100
    ?>
    // <? ?> <?= ?>都是可以跨行的

    <? if X > 0 then ?>
    local string b = "X > 0"
    <? elseif X < 0 then ?>
    local string b = "X < 0"
    <? end ?>
    // 条件控制语句,和Jass的区别只在于end和endif的区别
    //   仔细思考和观察,上面的代码在保存时发生了什么

    <? for i = 1, 10 do?>
        set a = 0
    <? end ?>
    // 循环语句,这次和Jass的循环不一样了,但相信还是很简单的
    //   仔细思考和观察,上面的代码在保存时发生了什么  

    <? for i = 1, 10 do?>
        set a = <?= i ?>
    <? end ?>
    // 这样混合使用,可能会更实用些
endfunction


作者: q2544382322    时间: 2023-10-1 01:32
我打啊打爱死我是一个没有脑子的傻逼




欢迎光临 天工维度魔兽争霸开发者社区-全国最大的TJ集中营-原提百万联盟 (http://bbs.mvprpg.com/) Powered by Discuz! X3.4