Lua是一种动态语言,在语言中没有类型定义的语法。

在lua中有8中基本的类型:

1.nil(空)

2.boolean

3.number(数字)

4.string(字符串)

5.userdata(自定义类型)

6.function(函数)

7.thread(线程)

8.table(表)

函数type可根据一个值返回类型的名称。

print(type("Hello world")) ------------->string

由于变量是没有预定义类型的,所以

a = ;

print(type(a)); --------------------->number

a = print;        ------------------------>注意这个是合法的

print(type(a)); ----------------------->function

这里我们重点来看下string类型

Lua的字符串是不可变的值,如果修改只能创建一个新的字符串:

a = "one";
b = string.gsub(a,"one","two");
print(a);-------------->one
print(b);-------------->two

Lua的字符串和其他Lua对象一样,都是采用自动内存管理机制所管理的对象。

另外还可以用一对匹配的双方括号来界定一个字母字符串,这样就可以延伸多行,但Lua不会解释其中的转义字符。

如:

page = [[
<html>
<head>
</head>
</html>
]]
write(page);

Lua提供了运行时数字和字符串自动转换。

print(""+); ------------------>21
print("Hello"+);---------------->错误

相反,Lua也可以将字符串转换成一个数字

print(10 .. );------------------>1020

在Lua中 .. 表示字符串连接操作符。

接着我们来看看table类型

a = {};------------------->创建一个table,并引用到变量a中

for i=1,1000 do a[i] = i * 2 end;

print(a[9];) -------------------->18

print(a["x"]);-------------------->nil

我们还可以将a["x"]写成a.x,但是注意a.x与a["x"]的区别。

长度操作符“#”用于返回一个数组或者线性表的最后一个索引,我们可以用他来干很多有意义的事情

遍历table:

for i=1,#a do

  print(a[i]);

end

删除最后一个元素:

a[#a] = nil;

末尾添加元素:

a[#a+1] = v;

当一个数组中间有空隙也就是说有元素是nil,那么#就认为这个空元素是数组结束的标志。

如果真的需要处理那些有空隙的数组,那么就需要用到函数table.maxn,它将放回数组的最大索引的元素。

a = {};

a[10000]  = 1;

print(table.maxn(a)); ---------------->10000

接下来我们来看下Lua里面的function函数

lua语言中的函数可以存储在变量中,可以通过参数来传递给其他函数,好可以作为其他函数的返回值。

Lua既可以调用自身的函数,也可以调用c语言的函数。

userdata和thread

userdata用于表示一种由应用程序或者c语言库所创建的新类型。

Lua学习之类型与值的更多相关文章

  1. lua学习之类型与值篇

    类型与值 lua 是动态类型的语言 在语言中没有类型定义的语法 每个值都携带有它的类型信息 8种基础类型 用 type 可以返回这个值的类型的名称 将一个变量用于不同类型,通常会导致混乱的代码 但合理 ...

  2. Lua中的类型与值

    [基础介绍] Lua是一种动态类型的语言.在语言中没有类型定义的语法,每个值都带有其自身的类型信息.在Lua中有8中基本类型,分别是: nil(空)类型 boolean(布尔)类型 number(数字 ...

  3. Lua 学习笔记(二)语法、类型、值

    首先Lua执行的每一段代码都称之为“程序块”,一个程序块也就是一连串的语句或命令,例如一个源码文件或一行代码.Lua语句之间并不需要分隔符,如代码中的换行就不起任何作用,当然为了养成编码习惯当两条或者 ...

  4. lua学习之table类型

    关系表类型,这是一个很强大的类型.我们可以把这个类型看作是一个数组.只是 C语言的数组,只能用正整数来作索引: 在Lua中,你可以用任意类型的值来作数组的索引,但这个值不能是 nil.同样,在C语言中 ...

  5. php学习日志(5)-解决Windows Live Writer错误:WindowsLive.Writer.CoreServices.HttpRequestHelper的类型初始值设定发生异常

    以前用Windows Live Writer写日志都好好的,前几天用写完日志,点击发布,突然弹出意外错误:“WindowsLive.Writer.CoreServices.HttpRequestHel ...

  6. 《JS权威指南学习总结--第三章类型、值和变量》

    第三章 类型.值和变量 内容要点 一.数据类型 1.在编程语言中,能够表示并操作的值的类型称做数据类型 2.JS的数据类型分为两类: 原始类型:数字.字符串和布尔值 对象类型 3.JS中有两个特殊的原 ...

  7. Lua学习笔记一

    学习了有一周多了.之前一直不想献丑,但还是记录下这个过程. 第1章  开发软件搭建 1. ubuntu 下lua安装 sudo apt-get install lua5.1 2.win下的环境搭建. ...

  8. lua学习项目笔记

    这几天草草的浏览了一下电子版的<lua程序设计>,没有懂的地方就自动忽略了,挑拣了一些可以理解的部分一直在推进.推进至后面的时候已经浑浑噩噩的了,有种想看完这本书的强迫症的感觉.推进CAP ...

  9. [转]LUA 学习笔记

    Lua 学习笔记 入门级 一.环境配置 方式一: 1.资源下载http://www.lua.org/download.html 2.用src中的源码创建了一个工程,注释调luac.c中main函数,生 ...

随机推荐

  1. keil问题:Error: failed to execute 'C:\Keil\ARM\BIN\ArmCC'

    1.打开cmd,进入相应的路径下 cd C:\Keil\ARM\BIN\ 输入 armcc  若显示如下界面则说明keil已经注册 2.若注册成功还没解决问题,则说明软件是在网上下载的破解版的,建议卸 ...

  2. JavaScript 正则表达式的入门与使用

    知道正则表达式已经很久了,粗略会看懂一些,不过以前没有系统的学习,最近在看<JS权威指南>,刚好看到了看到正则表达式部分,就比较系统的学习了正则表达式. 先说一下正则表达式的一些基本知识 ...

  3. 多路复用I/O模型poll() 模型 代码实现

    多路复用I/O模型poll() 模型 代码实现 poll()机制和select()机制是相似的,都是对多个描述符进行轮询的方式. 不同的是poll()没有描述符数目的限制. 是通过struct pol ...

  4. git 修改 本地分支名称

    http://www.yiibai.com/git/git_managing_branches.html 重命名分支 假设需要在项目中添加对宽字符的支持.并且已经创建了一个新的分支,但分支名称需要重新 ...

  5. vue 数组和对象不能直接赋值情况和解决方法

    Vue 不能检测以下变动的数组: 当你利用索引直接设置一个项时,例如:vm.items[indexOfItem] = newValue 当你修改数组的长度时,例如:vm.items.length = ...

  6. AC日记——旅游 bzoj 2157

    2157 思路: LCT: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 400005 #define IN ...

  7. 走进 MvvmLight for Xamarin.Forms

    一.Xamarin.Forms 不使用框架时的绑定 需要注意的是BindingContent,不是DataContent <ContentPage xmlns="http://xama ...

  8. 洛谷 P2680 运输计划-二分+树上差分(边权覆盖)

    P2680 运输计划 题目背景 公元 20442044 年,人类进入了宇宙纪元. 题目描述 公元20442044 年,人类进入了宇宙纪元. L 国有 nn 个星球,还有 n-1n−1 条双向航道,每条 ...

  9. 笔试之random7生成random10

    /*头条 已知有个Random7()的函数,返回1到7随机自然数,让利用这个Random7()构造Random10()随机1~10. random7构造1~49,限制到1~40,对10求余再+1 */ ...

  10. 数学【CF743C】Vladik and fractions

    Description 请找出一组合法的解使得\(\frac {1}{x} + \frac{1}{y} + \frac {1}{z} = \frac {2}{n}\)成立 其中\(x,y,z\)为正整 ...