lua脚本语言学习(一)

lua脚本语言学习

  • 单行注释:–
  • 多行注释:–[[ 多行注释 --]]
  • 标识符区分大小写
  • 在默认情况下,变量总是认为是全局的。全局变量不需要声明,给一个变量赋值后即创建了这个全局变量,访问一个没有初始化的全局变量也不会出错,只不过得到的结果是:nil。 如果你想删除一个全局变量,只需要将变量赋值为nil。 当且仅当一个变量不等于nil时,这个变量即存在。
数据类型描述
nil这个最简单,只有值nil属于该类,表示一个无效值(在条件表达式中相当于false)。
boolean包含两个值:false和true。
number表示双精度类型的实浮点数(对比C中的double)
string字符串由一对双引号或单引号来表示,用2个方括号“[[]]”来表示“一块”字符串
function由 C 或 Lua 编写的函数
userdata表示任意存储在变量中的C数据结构
thread表示执行的独立线路,用于执行协同程序
tableLua 中的表(table)其实是一个"关联数组"(associative arrays),数组的索引可以是数字、字符串或表类型。在 Lua 里,table 的创建是通过"构造表达式"来完成,最简单构造表达式是{},用来创建一个空表。
  • 可以使用type函数测试给定变量或者值的类型
  • 字符串连接用的是 “…” 。对一个数字字符串进行算数操作时,lua会将这个数字字符转成一个数字
  • “#”放在字符串前面,用来计算字符串的长度。
  • 划重点了,lua语言的表的默认初始索引一般以1开始
  • 在 Lua 里,最主要的线程是协同程序(coroutine)。它跟线程(thread)差不多,拥有自己独立的栈、局部变量和指令指针,可以跟其他协同程序共享全局变量和其他大部分东西。线程跟协程的区别:线程可以同时多个运行,而协程任意时刻只能运行一个,并且处于运行状态的协程只有被挂起(suspend)时才会暂停。
  • Lua 变量有三种类型:全局变量、局部变量、表中的域。Lua 中的变量全是全局变量,那怕是语句块或是函数里,除非用 local 显式声明为局部变量。局部变量的作用域为从声明位置开始到所在语句块结束。变量的默认值均为 nil。
  • Lua 可以对多个变量同时赋值,变量列表和值列表的各个元素用逗号分开,赋值语句右边的值会依次赋给左边的变量。 遇到赋值语句Lua会先计算右边所有的值然后再执行赋值操作。 当变量个数和值的个数不一致时:
a. 变量个数 > 值的个数             按变量个数补足nil
b. 变量个数 < 值的个数             多余的值会被忽略
  • 循环

    • while

      a = 10
      while(a < 20)
      do
          print(a)
          a = a + 1
      end
      
    • 数组for( var 从 exp1 变化到 exp2,每次变化以 exp3 为步长递增 var,并执行一次 “执行体”。exp3 是可选的,如果不指定,默认为1。 )

      for i=10,1,-1 do
          print(i)
      end
      
    • 泛型for( i是数组索引值,v是对应索引的数组元素值。ipairs是Lua提供的一个迭代器函数,用来迭代数组。 )

    --打印数组a的所有值  
    a = {"one", "two", "three"}
    for i, v in ipairs(a) do
        print(i, v)
    end 
    
    • repeat … until。循环总会执行一次
    --[ 变量定义 --]
    a = 10
    --[ 执行循环 --]
    repeat
       print("a的值为:", a)
       a = a + 1
    until( a > 15 )
    
  • 流程控制

    • if语句( 控制结构的条件表达式结果可以是任何值,Lua认为false和nil为假,true和非nil为真。 )
    if( 布尔表达式 1)
    then
       --[ 在布尔表达式 1 为 true 时执行该语句块 --]
    
    elseif( 布尔表达式 2)
    then
       --[ 在布尔表达式 2 为 true 时执行该语句块 --]
    
    elseif( 布尔表达式 3)
    then
       --[ 在布尔表达式 3 为 true 时执行该语句块 --]
    else 
       --[ 如果以上布尔表达式都不为 true 则执行该语句块 --]
    end
    
  • 函数

    • 多返回值、可变参数(…)
    optional_function_scope function function_name( argument1, argument2, argument3..., argumentn)
        function_body
        return result_params_comma_separated
    end
    
  • 算数运算符(+、-、*、/、%、^)

  • 关系运算符(==、~=、>、<、>=、<=)

  • 逻辑运算符(and、or、not)

  • 其他运算符(…(连接两个字符串)、#(一元运算符,返回字符串或表的长度))

  • Lua table 使用关联型数组,你可以用任意类型的值来作数组的索引,但这个值不能是 nil。Lua table 是不固定大小的,你可以根据自己需要进行扩容。

  • Lua提供了一个名为require的函数用来加载模块 。

require("<模块名>") 或者 require "<模块名>"
  • 文件I/O,分为简单模式、完全模式。简单模式和C差不多,完全模式使用外部的文件句柄来实现,它以一种面向对象的方式,将所有的文件操作定义为文件句柄的方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值