`
hulianwang2014
  • 浏览: 725913 次
文章分类
社区版块
存档分类
最新评论
  • bcworld: 排版成这样,一点看的欲望都没有了
    jfinal

Lua基础 类型和值(二)

 
阅读更多

5.Table

Lua的table类型比较强大,用过都知道,它的index不仅可以使用number,还能使用string等其他的值,nil除外。table没有固定的size,你可以动态地向table中添加元素。table是Lua中的主要数据结构。在Lua中,我们用table来表示普通数组,符号表,set,record,queue和其他的lua数据结构。Lua也使用table来表示module,package和其他的对象。当我们写io.read时,我们的意思是“io模块的read函数”,对Lua来说,它理解为“从名为io的table中以‘read’为key进行索引”。

在Lua中,table既不是值,也不是变量,而是对象。你可以理解成一个动态分配的对象,程序通过引用(或指针)来操作它。在后台没有隐藏的副本或者新table的创建(像按值传参那样,操作的是一个新复制的副本)。要创建一个table,只需要一个简单的表达式{ }:


table总是匿名的。table本身和存储table的变量,二者之间没有固定的联系:

当程序里不再引用一个table的时候,Lua的垃圾收集器会删除这个table并重用它的内存。

同一个table中可以存储不同index类型的值,并且table的大小可以动态增长
注意最后一行,像全局变量一样,如果table中未初始化的field值为nil,可以通过赋值nil的方式来删除一个table.

可以在Lua中使用record方式来索引值,a.name这种格式,相当于a["name"].

注意,a.x==a["x"] != a[x]
Lua的table的index值从1开始,不是从0,这个要格外注意

下图描述一下Lua的size运算符'#'的用法,它是以table中第一个值为nil的位置为end的,就像C语言的string是以'\0'为end一样,所以,用'#'的话,table中就不能有hole(值为nil的),仔细看下面的图,你会明白的。

注意最后两句,可以看出'#'和'table.maxn()'的功力。
因为a中第4个位置为nil,因此用'#'算出来就是3,而table.maxn就可以得到5.
table.maxn函数打印最大的数字index值

6.Functions

Function在lua中是属于first-class值,可以存储到变量中,可以作为参数传递给其他的function,可以作为function的result来return。
Lua中,可以调用用lua或C语言实现的函数。Lua本身就是用C实现的。它实现了string,table,io,math,debug等基本的库,程序可以自己定义其他的函数来扩展功能。

这部分在后续的博客中会继续深入挖掘一下

7.Userdata和Threads

userdata类型允许任意的C数据存入到lua的变量中,关于此类型,Lua中没有什么预定义的操作,除了复制和相等比较。此类型是为了表示由程序创建的一些数据类型;例如,io库用userdata类型来表示file。

具体的userdata和thread相关,后续随着学习进行会继续深入挖掘

水平有限,如果有朋友发现错误,欢迎留言交流。


分享到:
评论

相关推荐

    lua基础学习文档

    这个"lua基础学习文档"涵盖了对初学者至关重要的几个主题:lua函数库、模式匹配、文件处理以及表和元方法。让我们逐一深入探讨这些核心概念。 1. Lua函数库: Lua标准库提供了一系列内置函数,方便用户进行各种常见...

    unity中需要的lua基础

    1. **Lua基础语法**:Lua是一种简洁、易读的脚本语言,它的基本语法包括变量(全局和局部)、数据类型(如数值、字符串、表、布尔值和nil)、运算符、控制结构(如if语句、while循环、for循环)等。理解这些基础是...

    lua中文教程,从基础到深入的让你学习lua

    它支持五种基本数据类型:nil(无值)、boolean(布尔型)、number(数字)、string(字符串)和table(表)。表是Lua的通用数据结构,可以用于数组、集合、对象等多种用途。控制结构主要包括if语句、while和for循环...

    lua和c++交互

    同时,C++还可以通过lua_getglobal和lua_pcall等函数获取 Lua 全局变量的值和调用Lua函数。 2. **Lua调用C++函数**:为了使Lua能够调用C++函数,我们需要先在C++中注册这些函数。这通常通过lua_register或者lua_...

    lua基础笔记

    变量声明不需要指定类型,其数据类型包括数字(浮点数和整数)、字符串、布尔值、表(类似数组或哈希表)、函数以及nil。变量作用域默认为全局,但可以使用local关键字创建局部变量。 2. ** 表与元表 **:表是Lua的...

    lua基础学习笔记

    ### Lua基础学习笔记 #### 一、Lua简介与特点 Lua是一种轻量级且高效的脚本语言,广泛应用于游戏开发、网页应用、图形界面等领域。对于已有其他编程语言基础的学习者来说,掌握Lua通常较为迅速。Lua的设计哲学是...

    Lua基础语法

    Lua 基础语法 Lua 语言是一种轻量级、灵活、可扩展的脚本语言,它的语法设计简单易学,功能强大。...在 Lua 中,Table, Function 和 Userdata 是三种特殊的数据类型。只有 == 和 ~= 可以用来比较这些类型的数据。

    Lua程序设计(第二版)pdf 以及LuaForWindows_v5.1.5-52.exe

    在初学Lua时,首先你需要理解其基础语法,如变量声明(Lua是动态类型的)、赋值操作、条件语句(if-then-else)和循环结构(while、for)。Lua中的数据类型包括数字、字符串、布尔值、nil以及表,其中表是实现对象和...

    Lua程序设计(第二版).rar

    本书《Lua程序设计(第二版)》不仅覆盖了以上这些基础概念,还深入探讨了高级主题,如coroutine(协程)、metaprogramming(元编程)、网络编程、文件I/O、热更新技术以及如何优化Lua代码等。通过阅读此书,读者不仅...

    脚本策划LUA基础入门基础培训

    ### 脚本策划LUA基础入门基础培训 #### 一、引言 脚本策划在游戏开发领域扮演着至关重要的角色,特别是在游戏逻辑和交互设计方面。本篇旨在为初学者提供关于脚本策划及LUA语言的基础知识,帮助他们更好地理解脚本...

    Lua经典教程,附Lua环境 lua for windows

    一、Lua基础 1. 变量:Lua中的变量没有类型声明,支持动态类型,即变量的类型根据赋值自动确定,包括 nil(空值)、boolean(布尔)、number(数字)、string(字符串)、table(表)、function(函数)和thread...

    LUA全套帮助文档,里面有LUA的例子和LUA的全部资料

    它支持基本数据类型如数字、字符串、布尔值、表(相当于数组和哈希表的结合)、函数和nil。学习LUA的控制结构,如条件语句(if-then-else)和循环(while, for)也是必要的。 2. **表**:LUA的表是其最强大的特性,...

    lua中文手册lua-5.3-zh-manual.pdf

    Lua是一种动态类型语言,其值可以是六种基本类型之一:nil、boolean、number、string、userdata和function,以及两种复合类型:table和thread(协程)。不同类型的值在Lua中有不同的表示方式和行为。 2. 环境和全局...

    Lua程序设计第二版最新

    1. **Lua基础**:Lua是一种简洁、动态类型的脚本语言,其语法简单明了,易于学习。基础包括变量(全局和局部)、数据类型(如数字、字符串、表、布尔值和nil)、操作符、流程控制(如条件语句和循环结构)以及函数的...

    lua api lua文档

    - **Functions**:函数类型,是Lua中的一等公民,可以像其他类型的值一样被传递和返回。 - **Userdata and Threads**:用户数据类型,用于封装C语言的数据结构;线程类型,用于表示并发执行的上下文。 #### 四、...

    Lua程序设计.pdf_lua_nginx_

    一、Lua基础 Lua的基础部分涵盖了变量、数据类型、控制结构、函数、表(Lua的核心数据结构,类似于关联数组)等核心概念。变量在Lua中是动态类型的,可以存储任何类型的数据,包括整数、浮点数、字符串、布尔值以及...

    Lua测试器+Lua脚本语言简明教程

    ### Lua基础语法 1. **变量**:变量无类型限制,但有全局和局部之分,未声明的变量默认为全局。 2. **控制结构**:包含if...then...else...end,while,for等,用于逻辑控制。 3. **函数**:函数是第一类公民,可以...

    Test_Lua.rar_VS2010_VS2010 Lua_VS2010调用LUA脚本基础_lua_lua脚本

    5. **调用Lua函数和传递参数**:通过lua_push*系列函数将C++数据转换为Lua值,然后通过lua_setglobal或lua_call将它们作为参数传递给Lua函数。同样,可以从Lua返回值使用lua_to*系列函数转换回C++类型。 6. **错误...

    c++ lua封装库包含演示和库代码

    同时,我们还需要关注类型转换,如C++对象到Lua表,以及Lua值到C++变量的映射。 二、Lua与C++的数据交互 1. 将C++数据类型暴露给Lua:使用lua_register或luaL_setfuncs将C++函数和类注册为Lua全局函数或元表,以便...

Global site tag (gtag.js) - Google Analytics