zoukankan      html  css  js  c++  java
  • Lua笔记(1)

    今天开始学习Lua,下面把一些重点记下来:


    单行注释-- ,多行注释 --[[  .......  --]]

    Lua中false和nil表示条件判断的假,其余的,包括空字符串,0,都表示真。

    Lua没有整数,都是浮点数


    字符串

    Lua字符串不能直接修改,字符串可以用单引号或者双引号引住,反斜杠转义

    字符串转数字 print(“10” + 1 ) 输出11,而不是输出101(不是数字转字符串)

    字符串连接用.. 符号。 print(10 . 20) 输出1020,数字先转成字符串,再连接

    尽量不要依赖这些隐式转换,因为有时候会很奇怪,例如  10 == “10” 会返回false。用tonumber, tostring函数

    #“字符串” 表示字符串的长度


    表与c++的map类似,是一种广义数组

    a = {} 创建一个表

    a["abc"] = 10 添加元素

    注意变量a仅仅是存放了对这个table对象的引用,所以b = a 是引用赋值,而不是把整个表复制

    a["abc"] = 10 等价于 a.abc = 10 但不等于 a[abc]

    a[10]  与 a["10"] 是不一样的! 谨慎起见可以用a[tonumber("10")]

    访问不存在的索引(访问 a[12345] 但之前未对 a[12345] 赋值)统一返回nil,不会报错。由此得出删除一条记录的方法就是给它赋值nil。

    days = {"Monday", "Tuesday"} 会把days[1] 初始化为“Monday”, days[2] 初始化为"Tuesday"。从中可以看出Lua数组索引一般从1开始。

    表可以嵌套。例如: polyline = {color = "blue", {x=0,y=0},{x=-10,y=0}}。 于是polyline[1] 就是{x=0,y=0}这个表。

    a = {[1] = "1", [2] = "3"}这样初始化之后,a[1] 的值为"1", 由此可见数字索引初始化的方法。

    a = {x = "abc"} 等价于 a = {["x"] = "abc"}

    days = {"Monday", "Tuesday"} 会把days[1] 初始化为“Monday”, days[2] 初始化为"Tuesday"。从中可以看出Lua数组索引一般从1开始。

    表可以嵌套。例如: polyline = {color = "blue", {x=0,y=0},{x=-10,y=0}}。 于是polyline[1] 就是{x=0,y=0}这个表。

    大括号内部的逗号可以用分号代替。


    运算

    5%3 = 2   5.5 % 1 = 0.5

    ^是乘方,不是异或

    ~=才是不等于

    比较操作可以用于任意类型,字符串比较(包括大于小于)是按照字母顺序的,例如 "2" < "15" 返回false

    and or为运算法,and如果第一个操作数为假,返回之,否则返回第二个,or如果第一个为真,返回之,否则返回第二个。注意不是返回布尔型。


    赋值

    多重赋值 a,b = "va",10,a、b分别得到对应的值。Lua先对右边求值,再赋值。于是a,b = b,a可以用来交换a、b


    控制结构

    if.....elseif .....else ....end  注意不是else if

    while ... do .....end 注意有do

    repeat ... until ...

    for i = 1,10,2 do ....end  从1开始,每步自增2,直到大于10(注意不是大于等于)。不要在循环过程中改i。

    for i,v in ipairs(a) do print (i,v) end 只打印从1开始连续整数索引的元素,i是下标,v是value。同样不要在循环过程中修改变量的值。若是改为pairs,则可以遍历所有元素。


    函数

    “成员函数”的调用方式: o.foo(o,x) 可写成 o:foo(x)

    function add(a) ..... return ... end 函数定义语法

    多个返回值,直接return a,b

    变长参数 function show(...)  for i,v in ipairs{...} do .... end return end 注意在函数内部也是通过...访问变长参数。例如 a,b = ...。可以把...当做一个表达式看待。

    具有变长参数的函数可以拥有任意数量的固定参数,但是要放在变长参数之前。

    特别重要的一点是,所有局部变量都要声明为local,否则自动变成全局。



  • 相关阅读:
    二 .数据库(Data)操作
    一. 数据库(Data)基础
    五种IO/模型
    并发编程 (协程)
    七.并发编程 (线程池,返回值,回调函数)
    六.并发编程 (线程对列)
    五.并发编程 (线程事件)
    四.并发编程 (线程信号量)
    三.并发编程 (线程锁)
    二.并发编程 (程序中线程操作)
  • 原文地址:https://www.cnblogs.com/dydx/p/4222501.html
Copyright © 2011-2022 走看看