当前位置: 代码网 > it编程>前端脚本>Lua > Lua基本语法

Lua基本语法

2024年05月19日 Lua 我要评论
1 简介由 clean c 实现。需要被宿主程序调用,可以注入 c 函数。2 语法约定lua 的语法基于 bnf 的语法规则。lua 对大小写敏感。2.1 保留关键字c 语言中没有的关键字有:规范:全

1 简介

由 clean c 实现。需要被宿主程序调用,可以注入 c 函数。

2 语法约定

lua 的语法基于 bnf 的语法规则。

lua 对大小写敏感。

2.1 保留关键字

c 语言中没有的关键字有:

规范:全局变量以下划线开头。

2.2 操作符

c 语言中没有的操作符:

^
~=
//  -- 向下取整
lua 中没有的操作符:

+=
-=

2.3 字符串定义

采用转义符:通过转义符表示那些有歧义的字符

字符表示

a           -- 代表字符 a
\97         -- 代表字符 a
\049        -- 代表数字字符 1
其他转义符表示

\\n         -- 代表字符串 \n
\n          -- 代表换行
注意数字字符必须是三位。其他字符则不能超过三位。

采用长括号:长括号内的所有内容都作为普通字符处理。

[[]]        -- 0级长括号
[==[]==]    -- 2级长括号

3 值与类型

lua 是动态语言,变量没有类型,值才有。值自身携带类型信息。

lua 有八种基本数据类型:nil, boolean, number, string, function, userdata, thread, table。

仅 nil 和 false 导致条件为假,其他均为真。

userdata 类型变量用于保存 c 数据。 lua 只能对该类数据进行使用,而不能进行创建或修改,保证宿主程序完全掌握数据。

thread 用于实现协程(coroutine)。

table 用于实现关联数组。table 允许任何类型的数据做索引,也允许任何类型做 table 域中的值(前述
任何类型 不包含 nil)。table 是 lua 中唯一的数据结构。
由于函数也是一种值,所以 table 中可以存放函数。

function, userdata, thread, table 这些类型的值都是对象。这些类型的变量都只是保存变量的引用,并且在进行赋值,参数传递,函数返回等操作时不会进行任何性质的拷贝。

库函数 type() 返回变量的类型描述信息。

3.1 强制转换

lua 提供数字与字符串间的自动转换。
可以使用 format 函数控制数字向字符串的转换。

4 变量

变量有三种类型:全局变量、局部变量、表中的域。

函数外的变量默认为全局变量,除非用 local 显示声明。函数内变量与函数的参数默认为局部变量。

局部变量的作用域为从声明位置开始到所在语句块结束(或者是直到下一个同名局部变量的声明)。

变量的默认值均为 nil。

方便标记,--> 代表前面表达式的结果。

4.1 索引

对 table 的索引使用方括号 []。lua使用语法糖提供 . 操作。

t[i]
t.i                 -- 当索引为字符串类型时的一种简化写法
gettable_event(t,i) -- 采用索引访问本质上是一个类似这样的函数调用

4.2 环境表

所有全局变量放在一个环境表里,该表的变量名为 _env 。对某个全局变量 a 的访问即 _env.a (_env_ 只是为了方便说明)。

每个函数作为变量持有一个环境表的引用,里面包含该函数可调用的所有变量。
子函数会从父函数继承环境表。
可以通过函数 getfenv / setfenv 来读写环境表。

以上所述就是本文的全部内容了,希望大家能够喜欢。

(0)

相关文章:

  • 详解Lua中的变量相关知识点

    详解Lua中的变量相关知识点

    变量不过是存储到区域项目可以操作的名称。它可以容纳不同类型的值,包括函数和表格。变量名可以由字母,数字和下划线。它必须以字母或下划线。大写和小写字母是不同的,因... [阅读全文]
  • lua中赋值类型代码详解

    lua中赋值类型代码详解

    我们来看看lua vm在解析下面源码并生成bytecode时的整个过程: foo = "bar" local a, b = "a", "b" foo = a首先... [阅读全文]
  • 详解Lua中的数据类型

    详解Lua中的数据类型

    lua是动态类型语言,所以变量没有类型,仅值有类型。值可以被存储在变量中,作为参数传递,并作为结果返回。在lua中虽然我们没有变量的数据类型,但我们有类型的值。... [阅读全文]
  • Redis教程(五):Set数据类型

    Redis教程(五):Set数据类型

    一、概述: 在redis中,我们可以将set类型看作为没有排序的字符集合,和list类型一样,我们也可以在该类型的数据值上执行添加、删除或判断某一元素是否存在等... [阅读全文]
  • Lua中算术运算符的使用示例

    Lua中算术运算符的使用示例

    下表列出了所有的lua语言支持的算术运算符。假设变量a持有10和变量b持有20,则:例子试试下面的例子就明白了所有的lua编程语言提供了算术运算符:当执行上面的... [阅读全文]
  • Redis教程(三):List数据类型

    Redis教程(三):List数据类型

    一、概述: 在redis中,list类型是按照插入顺序排序的字符串链表。和数据结构中的普通链表一样,我们可以在其头部(left)和尾部(right)添加新的元素... [阅读全文]

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com