--[[ 参考书籍:LUA程序设计和LUA5.1参考手册 -- lua 定义: -- -- Lua 是一个扩展式程序设计语言,它被设计成支持通用的过程式编程,并有相关数据描述的设施。Lua 也能对面向对象编程,函数式编程, -- 数据驱动式编程提供很好的支持。它可以作为一个强大、轻量的脚本语言,供任何需要的程序使用。Lua 以一个用 clean C 写成的库形式提供。 -- (所谓 Clean C,指的 ANSI C 和 C++ 中共通的一个子集) 作为一个扩展式语言,Lua 没有 "main" 程序的概念:它只能 嵌入 一个宿主程序中工作,这个宿主程序被称作embedding program 或简称为 host. 宿主程序可以通过调用函数执行一小段 Lua 代码,可以读写 Lua 变量,可以注入 C 函数让 Lua 代码调用。这些扩展的 C 函数, 可以大大的扩展了 Lua 可以处理事务的领域,这样就可以订制出各种语言,而它们共享一个统一的句法格式的框架。Lua 的官方发布版就包含了一个叫做 lua 的简单的宿主程序,它用 Lua 库提供了一个保证独立的 Lua 解释器。 这就是lua 语言, 被设计成一种过程式的编程语言,但是同时lua也支持面向对象的编程! lua可以建立类,并创建对象! -- -- -- ]]-- --[[ -- 第二节 语言 --这一节从词法、语法、句法上描述 Lua 。换句话说,这一节描述了哪些 token (符记)是有效的,它们如何被组合起来,这些组合方式有什么含义。 --2.1 语法约定 -- --Lua 中用到的 名字(也称作 标识符)可以是任何非数字开头的字母、数字、下划线组成的字符串。 这符合几乎所有编程语言中关于名字的定义。 --(字母的定义依赖于当前环境:系统环境中定义的字母表中的字母都可以被用于标识符。) 标识符用来命名变量,或作为表的域名 -- 下面的关键字是保留的,不能用作名字: and break do else elseif end false for function if in local nil not or repeat return then true until while --Lua 是一个大小写敏感的语言: and 是一个保留字,但是 And 和 AND 则是两个不同的合法的名字。 -- -- 数字常量可以分两部分写,十进制底数部分和十进制的指数部分。指数部分是可选的。 Lua 也支持十六进制整数常量,只需要在前面加上前缀 0x 。 -- 下面是一些合法的数字常量的例子: 3 3.0 3.1416 314.16e-2 0.31416E1 0xff 0x56 -- --]]-- --[[ --2.2 值与类型 -- --lua 是一种 动态类型语言。 这意味着变量没有类型,只有值才有类型。 语言中不存在类型定义。而所有的值本身携带它们自己的类型信息。 --Lua 中的所有值都是一致 (first-class) 的。 这意味着所有的值都可以被放在变量里,当作参数传递到另一个函数中,并被函数作为结果返回。 --Lua 中有八种基本类型: nil, boolean, number, string, function, userdata, thread, and table. Nil 类型只有一种值 nil , --它的主要用途用于标表识和别的任何值的差异; 通常,当需要描述一个无意义的值时会用到它。 -- userdata 类型用来将任意 C 数据保存在 Lua 变量中。 这个类型相当于一块原生的内存,除了赋值和相同性判断,Lua 没有为之预定义任何操作。 然而,通过使用 metatable (元表) ,程序员可以为 userdata 自定义一组操作 (参见 §2.8)。 userdata 不能在 Lua 中创建出来, 也不能在 Lua 中修改。这样的操作只能通过 C API。 这一点保证了宿主程序完全掌管其中的数据。 thread 类型用来区别独立的执行线程,它被用来实现 coroutine (协同例程)(参见 §2.11)。 不要把 Lua 线程跟操作系统的线程搞混。 Lua 可以在所有的系统上提供对 coroutine 的支持,即使系统并不支持线程。 table 类型实现了一个关联数组。也就是说, 数组可以用任何东西(除了nil)做索引,而不限于数字。 table 可以以不同类型的值构成;它可以包含 所有的类型的值(除 nil 外)。 table 是 lua 中唯一的一种数据结构;它可以用来描述原始的数组、符号表、集合、 记录、图、树、等等。 用于表述记录时,lua 使用域名作为索引。 语言本身采用一种语法糖,支持以 a.name 的形式表示 a["name"]。 有很多形式用于在 lua 中创建一个 table 。 跟索引一样, table 每个域中的值也可以是任何类型(除 nil外)。 特别的,因为函数本身也是值,所以 table 的域中也可以放函数。 这样 table 中就可以有一些 methods 了 (参见see §2.5.9)。 table, function ,thread ,和 (full) userdata 这些类型的值是所谓的对象: 变量本身并不会真正的存放它们的值,而只是放了一个对对象 的引用。赋值,参数传递,函数返回,都是对这些对象的引用进行操作; 这些操作不会做暗地里做任何性质的拷贝。 库函数 type 可以返回一个描述给定值的类型的字符串。 -- -- -- ]] print(type("abc")) print(type("123")) print(type("s")) print(type(123)) print(type(string)) print(type(table)) print(type(nil)) a=123 print(a) a=nil --将全局变量赋值为nil,等同于删除a print(a) print(#"abcde") --获取字符串的长度 a, b, c = 0, 1 print(a,b,c) --> 0 1 nil print(abc) --abc默认值为nil --[[ -- 类型转换 -- tonumber,tostring -- -- -- ]]-- print(10 .. "abc") --操作是字符串的链接符号,注意abc必须用引号引起来,否则abc的值为nil,nil不能做链接操作。 print("10" + 10) --字符类型和number类型进行+操作,lua会自动将 string类型转换为number print(tostring(10) == "10") print(10 .."" == "10")
Lua笔记1-lua是什么
最新推荐文章于 2023-03-19 18:09:14 发布