• Lua笔记


    闭包

    示例一

     1 function newCounter()
     2     local i = 0
     3     return function()     -- anonymous function
     4        i = i + 1
     5         return i
     6     end
     7 end
     8  
     9 c1 = newCounter()
    10 print(c1())  --> 1
    11 print(c1())  --> 2

    示例二

    1 function myPower(x)
    2     return function(y) return y^x end
    3 end
    4  
    5 power2 = myPower(2)
    6 power3 = myPower(3)
    7  
    8 print(power2(4)) --4的2次方
    9 print(power3(5)) --5的3次方

    Lua中的变量,如果没有local关键字,全都是全局变量,Lua也是用Table来管理全局变量的,Lua把这些全局变量放在了一个叫“_G”的Table里。

    我们可以用如下的方式来访问一个全局变量(假设我们这个全局变量名叫globalVar):

    1 _G.globalVar
    2 _G["globalVar"]

    MetaMethod

    __add(a, b)                     对应表达式 a + b
    __sub(a, b)                     对应表达式 a - b
    __mul(a, b)                     对应表达式 a * b
    __div(a, b)                     对应表达式 a / b
    __mod(a, b)                     对应表达式 a % b
    __pow(a, b)                     对应表达式 a ^ b
    __unm(a)                        对应表达式 -a
    __concat(a, b)                  对应表达式 a .. b
    __len(a)                        对应表达式 #a
    __eq(a, b)                      对应表达式 a == b
    __lt(a, b)                      对应表达式 a < b
    __le(a, b)                      对应表达式 a <= b
    __index(a, b)                   对应表达式 a.b
    __newindex(a, b, c)             对应表达式 a.b = c
    __call(a, ...)                  对应表达式 a(...)

    模块

    1. require(“model_name”)函数,载入同样的lua文件时,只有第一次的时候会去执行,后面都不执行了;
    2. dofile(“model_name”)函数,每一次文件都会执行;
    3. loadfile(“model_name”)函数,载入后不执行,等你需要的时候执行时;
    1 local hello = loadfile("hello")
    2 ... ...
    3 ... ...
    4 hello()

     一行代码实现表的拷贝

    1 u = {unpack(t)}

    需要注意的是此法在表内条目大于2000时会失效。

    一行代码判断表是否为空

    #t == 0并不能判断表是否为空,因为#预算符会忽略所有不连续的数字下标和非数字下标。

    正确做法是:

    if next(t) == nil then 
        -- 表为空
        -- ...
    end

    因为表的键可能为false,所以必须与nil比较,而不直接使用~next(t)来判断表是否空。

    更快的插入代码

    -- 更慢
    table.insert(t, value) 
     
    -- 更快
    t[#t+1] = value 

    原因:[]和#避免了高层的函数调用开销

  • 相关阅读:
    Excel的小游戏总结
    借助“URLScan”工具隐藏header头服务器信息
    WinCe设备连接Win10系统
    WinForm 通过HttpWebRequest实现大文件上传
    Sql 动态行转列 pivot
    C# 调用LAKALA接口获取静态二维码数据
    蜗牛星际黑群晖硬盘休眠的设置
    GIT Windows服务端搭建笔记
    C#通过socket判断FTP服务器是否通畅并判断用户名密码是否正确
    C#获取MAC地址
  • 原文地址:https://www.cnblogs.com/YYRise/p/5366053.html
Copyright © 2020-2023  润新知