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项目,提供在特定平台上的即时编译功能。

命名规范:Lua采用了和CSharp类似的命名规范由任意字母、数字和下划线构成,但不能以数字开头。原则上不使用下划线加大写字母变量名称。当然也不能使用Lua关键字,而且Lua也是却分大小写的。关键字如下:

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的数据类型,布布扣,bubuko.com

时间: 2024-10-10 15:48:18

02.Lua的数据类型的相关文章

Lua中数据类型的源码实现

    概述 在Lua中有8种基础类型:nil.boolean.number.string.userdata.function.thread和table.可以使用函数type查看某个变量或值的类型,返回相应的类型名称.像其他动态语言一样,在语言中没有类型定义的语法,每个值都携带了它自身的类型信息.下面将通过Lua 5.2.1的源码来看类型的实现.    源码实现 Lua将值表示成带标志的联合结构,代码如下(lobject.h): 90 /* 91 ** Union of all Lua valu

SQLite学习第02天:数据类型

参考资料:http://www.w3cschool.cc/sqlite/sqlite-data-types.html 在SQLite中,数据类型的概念看起来很模糊,刚开始接触感觉跟C语言提供的数据类型概念相差甚远,不知道这是功能的弱化还是灵活性的提高,只能且行且体会吧. 在数据类型小节提出了存储类和Affinity类型的概念,关于存储类跟常规的C语言的数据类型相近. 而对于Affinity类型的概念,我的理解是SQLite对存储类型还是进行了细致的分类,而这些类型又可以找到最相近的一个存储类,而

Lua学习----Lua基础数据类型

前言 Lua有6中数据类型,分别是nil(空).boolean(布尔).number(数字).string(字符).table(表).function(函数) 在Lua中可以使用type函数来返回一个值或者变量所属的类型,如: print(type("helle world")) -->output:string print(type(print)) -->output:function print(type(true)) -->output:boolean 1.ni

lua的数据类型

Lua 是动态(弱)类型的语言,它有一下几种数据结构: nil(空) nil 类型表示一种没有任何有效值,它只有一个值 -- nil,例如打印一个没有赋值的变量,便会输出一个 nil 值: print(type(a)) 对于全局变量和 table,nil 还有一个“删除”作用,给全局变量或者 table 表里的变量赋一个 nil 值,等同于把它们删掉,执行下面代码就知: tab1 = { key1 = "val1", key2 = "val2", "val

MySQL学习记录【02】常用数据类型

1.文本 CHAR(*):最多255个字节的定长字符串,它的长度必须在创建时指定 VARCHAR(*):最多255个字节的可变长度字符串,它的长度必须在创建时指定 TEXT:最大长度为64K字符的变长文本 TINYTEXT:最大长度为255字符的变长文本 MEDUIMTEXT:最大长度为16K字符的变长文本 LONGTEXT:最大长度为4GB字符的变长文本 2.整数(考虑数据取值后选择尽可能小的数据类型) tinyint:1字节.有符号值:-128 到127:无符号值:0到255 smallin

02. 变量与数据类型

1. 变量与数据类型 1.1 什么是变量 1.2 Python中的命名规范 1.3 数据类型 1.3 可变类型与不可变类型 2. Python中的“引用”概念 3. 常用的数据类型转换 1. 变量与数据类型 1.1 什么是变量 在Python中,存储一个数据,需要一个叫做变量的东西. 程序就是用来处理数据的,而变量就是用来存储数据的. 1 num1 = 100 # num1就是一个变量,好比一个菜篮子 2 3 num2 = 87 # num2也是一个变量 4 5 result = num1 +

Lua 架构 The Lua Architecture

转载自:http://magicpanda.net/2010/10/lua%E6%9E%B6%E6%9E%84%E6%96%87%E6%A1%A3/ Lua架构文档(翻译) 十 102010 前段时间翻译了lua官方关于lua5架构设计的一份文档,现在分享给大家. 注意:所有版权都归lua官方所有,本人仅将其翻译为中文,以方便中文阅读者.翻译中出现任何错误导致的结果,本人不负任何责任. 如果有任何翻译错误,以及意见与建议,请email本人.邮件地址:[email protected]. 转载请注

[lua]紫猫lua教程-命令宝典-L1-01-02. 变量

L1[变量]01. 变量命名规则 命名规则:数字字母下划线构成 但是不能数字开头 不推荐中文名 很多都是不支持中文 但是在一些其他的编辑器里面 比如触摸精灵 之类的 就可以 注意 :变量命名必须要包含一定涵义   比如我们要用变量存储一个年龄数值 比如我们用 x=18 别人看我们的源码 看到这里 她不明白 X这个变量为18代表什么意思  如果我们用age=18  那么他一看就明白了 方便我们自己 也方便他人  这个是一个良好的习惯 值得培养 注意 变量名区分大小写 注意:变量名有一些系统保留字

lua 入门学习

-- 1.Hello world print( "--------------1--------------") print("Hello world"); -- 2. function define function add(a,b) return a + b end print( "--------------2--------------") print( "enter a number:" ) n = io.read(