02.Lua的数据类型
简单认识Lua
百度了一下(偷哈懒就不自己写了)
Lua 是一个小巧的脚本语言。是巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个研究小组,
由Roberto Ierusalimschy、Waldemar Celes 和 Luiz Henrique de Figueiredo所组成并于1993年开发。 其设计目的是为了嵌入应用程序中,
从而为应用程序提供灵活的扩展和定制功能。Lua由标准C编写而成,几乎在所有操作系统和平台上都可以编译,运行。Lua并没有提供强大的库,
这是由它的定位决定的。所以Lua不适合作为开发独立应用程序的语言。Lua 有一个同时进行的JIT项目,提供在特定平台上的即时编译功能。
and | break | do | else | elseif | end | false |
for | function | if | in | local | nil | not |
or | repeat | return | then | true | until | while |
注释:行注释使用两个连字符(--);多行注释有两种大同小异以”--[[“开始,以”--]]”结尾或者以”--[==[”开始以” –]==]”结尾中间的等号可以任意多个但前后要匹配。
全局变量:Lua中的全局变量比较特殊,不需要声明直接使用即可,没有给值得到的久是nil值。删除全局变量直接给他nil就删除。
数据类型
Lua是一种动态类型的语言,没有类型定义语法;也就是说一个Lua变量既可以存储数字类型的值也可以存储字符串类型的值或者其他类型。但通常我们不这样干,因为很容易混淆。Lua定义了8中基础类型
类型 | 名称 | 类型 | 名称 |
nil | 空 | boolean | 布尔 |
number | 数字 | string | 字符串 |
userdata | 自定义类型 | function | 函数 |
thread | 线程 | table | 表 |
Lua中获取变量类型也比较简单实用type函数即可。写一段代码测试先:
print(a) -- a的值为nil
print(type(tmp)) -- tmp的值为nil但这里不是打印它的值,而是值的类型
tmp = 3 -- 给tmp赋值整数3
print(type(tmp)) --> number
tmp = 3.14 -- 给tmp赋值浮点数
print(type(tmp)) --> number
tmp = print -- 将函数print赋值给tmp
print(type(tmp)) --> function
tmp = true
print(type(tmp)) --> boolean
tmp = nil -- 给全局变量nil值相当于删除
print(type(tmp)) --> nil
上面代码很简单也有注释很容易看懂就不再解释。
布尔类型:布尔类型主要用于分支结构中判断真与假。Lua在条件测试时只有两个值认为是假:false和nil,其他任何值都认为是真包括数字零和空字符串。
数字类型:Lua中的数字类型来得相当简洁没有CSharp中的长短整型、单双精度浮点数,就一个number实数类型。
字符串:Lua中的字符串是不可变的值,也就是说不能在字符串上直接修改。字面字符串既可以使用双引号也可以使用单引号,但建议统一一种风格。Lua中也支持转义字符
\a | 响铃 | \b | 退格 |
\f | 提供表格 | \n | 换行 |
\r | 回车 | \t | 水平tab |
\v | 垂直tab | \\ | 反斜杠 |
\” | 双引号 | \’ | 单引号 |
除转义字符外Lua也支持根据ASCII编码将数字转义为字符。另外可以使用两对方括号”[[””]]”一段字符串,里面的字符串将不会被转义。但两对方括号并不能处理所有情况比如字符串中包含a=b[c[i]],这中情况可以想块注释那样,在方括号中间加任意的等号。
字符串类型转换:说到字符串就不得不说字符串与数字之间的类型转换。在Lua中,Lua解释器会根据上下文自动将字符串转换为数字或者将数字转换为字符串。还是看下面代码的”类型转换“部分:
a = "one string"
b = 'one'
print(a) --> one string
print(b) --> one
b=string.gsub(a,"one","other") -- 执行字符串替换 当然你也可以这样写a=string.gsub(a,"one","other")
print(a) --> one string
print(b) --> other string
-------------------------- -----------ASCII 数字转义----------------
a = "hello worl\100"
print(a) --> heloo world -----------------块字符串,不转义内容-------------------
a = [[
<html>
<head>字符串测试</head>
<body><h1>http://home.cnblogs.com/u/BlueBeauty</h1> </body>
</html>
]] print(a)
----------------------块字符串,处理极端情况----------------------------
a = [===[
<html>
<head>字符串测试</head>
<body><h1>http://home.cnblogs.com/u/BlueBeauty</h1><h2>a=b[c[i]]</h2> </body>
</html>
]===] print(a) ---------------------类型转换-----------------------------
print("29" + 3) --> 32
print("29 + 3") --> 29 + 3
print("3.14"*"2.5") --> 7.85
--print("hello"+8) 错误,Lua解释为加法计算,但不能将hello转换为数字
print("hello"..8) --> hello8
--print(10..20) 这句错误,使用连接操作符时,如果第一个操作数是数字需要使用空格隔开,如下面两句
print(10 .. 20) --> 1020
print(10 ..30) --> 1030
b = 10=="10"
print(b) --> false
print(10==tonumber("10")) --> true
print(tostring(10)=="10") --> true -------------长度操作符的使用----------
a = "hello"
print(#a) --> 5
print(#"hello worl\100 hjs") --> 15
表(table)类型:Lua中的表实现了”关联数组“,它能使用除nil以外的任何lua类型值来索引数组。对表更准确的理解表应该是对象。使用一对大括号{}来创建表,而且他总是匿名的。当没有变量持有表的引用时,Lua将自动收回其内存。下面还是通过代码来看看表的具体操作:
-----------------------表创建于基本访问------------------------
a = {} --打印a的地址table: 004FC330(也就是引用) 创建一个表,没有任何元素
print(a)
tmp = "hjs"
a[tmp] = 123 --添加一个项目(key=hjs , value = 123),table会动态增加和全局变量类似
a[10] = 20 --添加一个项目(key=10 , value = 20)
print(a[tmp]) -->123
print(a[10]) -->20 b = a --将表引用赋值给b
print(a[tmp]) -->20
a[10] = 30 --修改表中元素的值
print(a[10]) -->30 -------------表访问另一种语法---------------------------
a.name = "xiaoyue"
print(a.name) -->xiaoyue
print(a["name"]) -->xiaoyue 说明:这两句都是访问表中key为name的项目 --------------获取表大小--------------------------------
a = {}
a[100] = 20
print(#a) --> 0 说明:Lua使用nil作为数组的结束标记,a[1]的值为nil所有这里得到0 (Lua中下标通常从1开始)
print(table.maxn(a)) --> 100 使用table.maxn函数可以很好的工作 -------------表索引的数据类型转换-----------------------
i =10 ; j="10";k = "+10"
a = {}
a[i] = "one"
a[j] = "two"
a[k] = "other"
print(a[i]) -->one
print(a[j]) -->two
print(a[k]) -->other 说明: i j k 三个变量都可以转换为数字类型10
-- 但表访问时并没有做数据转换,所有三个key不一样 print(a[tonumber(j)]) -->one
print(a[tonumber(k)]) -->one
数据类型就先说到这里吧,后面还有几个函数等类型就放在以后说了。
02.Lua的数据类型的更多相关文章
- Lua学习----Lua基础数据类型
前言 Lua有6中数据类型,分别是nil(空).boolean(布尔).number(数字).string(字符).table(表).function(函数) 在Lua中可以使用type函数来返回一个 ...
- lua通用数据类型
TValue结构 TValue这个结构体是Lua的通用结构体,,Lua中的所有的数据都可以使用这个结构体来表示.很容易想到,在面向对象中,这个结构体是一个基类,派生出来的都是其他的子类. TValue ...
- lua的数据类型
Lua 是动态(弱)类型的语言,它有一下几种数据结构: nil(空) nil 类型表示一种没有任何有效值,它只有一个值 -- nil,例如打印一个没有赋值的变量,便会输出一个 nil 值: print ...
- SQLite学习第02天:数据类型
参考资料:http://www.w3cschool.cc/sqlite/sqlite-data-types.html 在SQLite中,数据类型的概念看起来很模糊,刚开始接触感觉跟C语言提供的数据类型 ...
- Python快速学习02:基本数据类型 & 序列
前言 系列文章:[传送门] 也就每点一点点的开始咯,“还有两年时间,两年可以学很多东西的” Python ['paɪθən] n. 巨蛇,大蟒 基本数据类型 变量不需要声明 a=10 # int 整 ...
- [零基础学JAVA]Java SE基础部分-02.标识符、数据类型
转自:http://redking.blog.51cto.com/27212/114976 1.课程名称:标识符.数据类型 本季介绍了Java中的标识符的命名规则,各种关键字及数据类型的划分,并对各种 ...
- Python开发 第02课 Python 数据类型
1.Python 变量类型 变量存储在内存中的值.这就意味着在创建变量时会在内存中开辟一个空间.基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中.因此,变量可以指定不同的数据 ...
- 「JavaSE 重新出发」02.01 基本数据类型
基本数据类型 1. 整型 注意:Java 没有任何无符号(unsigned)形式的 int.long.short 或 byte 类型. 不同进制的表示形式: 十六进制数值有一个前缀0x或0X(如0xC ...
- 02 . Python之数据类型
Python入门之数据类型 变量存储在内存中的值.这就意味着在创建变量时会在内存中开辟一个空间.基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中. 因此,变量可以指定不同的数 ...
随机推荐
- SQL WHILE 循环中的游标 用例,SQL中实现循环操作
--声明两个应用变量 declare @USERID_ int declare @ORGANISEUNITID_ int --声明一个变量计数用,开发中可以忽略 declare @i int=0 -- ...
- win7禁止自动使用浏览器打开FTP而是用资源管理器
Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\ftp] @="URL:File Transfer Protocol" ...
- Cracking the coding interview--Q2.1
原文: Write code to remove duplicates from an unsorted linked list.FOLLOW UPHow would you solve this p ...
- windows环境变量如何在cmd中打印
在windows的cmd下,用"set"命令可以得到全部的环境变量,如何想得到某个环境变量,直接这样"set path"就可以了. set不仅如何,还有其他功能 ...
- Android数据存储三剑客——SharedPreferences、File、SQLite
Android中常用的数据存储一般有三种方式:SharedPreferences.文件和SQLite数据库,用来保存需要长时间保存的数据.本文将通过几个具体的小实例来讲解这三种方式的具体实现. 数据存 ...
- iOS之UITableView带滑动操作菜单的Cell
制作一个可以滑动操作的 Table View Cell 本文翻译自 http://www.raywenderlich.com/62435/make-swipeable-table-view-cell- ...
- windows server2012域服务器降级的方法
最近在一个新的网络环境里建立windows域服务器,准备建立主.备两台域服务器.在一台新服务器上面安装了windows2012R2并配置了DC服务.域和林的级别设置为Windows2012R2级别.在 ...
- firefox关于about:config的常用配置
about:config是火狐的设置页面,火狐提供了不少高级设置选项在这里以便让你可以更加详细地控制火狐的运行方式.(官方不推荐用户手工修改about:config的设置.所以,如果你对于你想修改的内 ...
- [ES6] Array -- Destructuring and Rest Parameters && for ..of && Arrat.find()
We can use the destructing and rest parameters at the same time when dealing with Array opration. Ex ...
- Python进阶之路---1.5python数据类型-字符串
字符串 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; ...