zoukankan      html  css  js  c++  java
  • 类型和值

      Lua是动态类型语言,变量不要类型定义。Lua中有8个基本类型分别为:nil、boolean、number、string、userdate、function、thread和table。函数type可以测试给定变量或者数值的类型。

        print(type(“Hello world”))              -->   string

        print(type(10.4*3))                        --> number

        print(type(print))                           -->   function

        print(type(true))                            -->   boolean

        print(type(nil))                                   -->   nil

        print(type(type(x)))                            -->   string

      变量没有预定义的类型,每一个变量都可能包含任一种类型的值。

        print(type(a))         --> nil

        a = 10           

        print(type(a))         -->   number

        a = “a string!!”

        print(type(a))         -->   string

        a = print

        a(type(a))                     -->   function

      一般情况下同一变量代表不同类型的值会造成混乱,最好不要用,但是特殊情况下可以带来便利,比如nil。

    nil

      Lua中特殊的类型,只有一个值:nil,表示没有任何有效值的情况;一个变量没有被赋值以前默认值为nil;给变量赋nil可以删除该变量。如果变量被赋值为nil,则Lua的垃圾收集器会删除该变量,释放它所占用的内存。

    布尔类型boolean

      两个取值false和true。但要注意Lua中所有的值都可以作为条件。在控制结构的条件中除了false和nil为假,其他值都为真。所以Lua认为0和空串都是真。

    数值类型 number

      表示实数(包括整数和浮点数),整数可以是十进制和十六进制,由一串数字序列组成。如果是0x开始则表示它为一个十六进制数。浮点数必须包含一个数字、一个小数点或e(或E)。Lua的number可以处理任何长整形不用担心误差。也可以在编译Lua的时候使用长整形或者单精度浮点型代替number。

        4            0.4                 4.57e-3          0.3e12            5e+20

    字符串类型 string

      指字符的序列,是若干封装在双引号(“)或单引号(‘)内的字符。Lua是8位字节,所以字符串可以包含任何数值字符,包括嵌入的0。这意味着可以存储任意的二进制数据在一个字符串里。Lua中字符串是不可以修改的,可以创建一个新的变量存放你要的字符串。

        a = “one string”

        b = string.gsub(a,”one”,”another”)

        print(a)          -->   one string

        print(b)          -->   another string

      string和其他对象一样,Lua自动进行内存分配和释放,一个string可以只包含一个字母也可以包含一本书,Lua可以高效的处理厂字符串,1M的string在Lua中是很常见的。可以使用单引号或者双引号表示串。

      还可以在字符串中使用ddd(ddd为三位十进制数字)方式表示字母。

        “alo 123”和"97lo104923"是相同的。

      还可以使用[[...]]表示字符串。这种形式的字符串可以包含多行,也可以嵌套且不会解释转移序列,如果第一个字符是换行符会被自动忽略掉。这种形式的字符串用来包含一段代码是非常方便的。

    自定义类型 userdate

      在Lua中可以通过自定义类型与C进行交互,通过自定义类型可以将任意的C语言数据存储到Lua变量中,代码交互。

    函数类型 function

      在Lua中函数可以作为一种数据类型使用,函数可以赋值给一个变量,也可以作为参数传递给其他的函数。

    线程类型 thread

      表示一个线程,线程可以同时执行多个,每个线程拥有自己独立的栈、局部变量和指令指针。

    表类型

      表类型实现了一组关联数组类型。表类型是使用{}表示的。

        local point = {x=10,y=20}

        print(point[“x”])           -- 采用下表方式访问

        print(point.x)                -- 采用字典方式访问

    数据类型转换

      运行时,Lua会自动在string和number之间自动进行类型转换,当一个字符串使用算术操作符时,string就会被转成数字。

        print(“10” + 1)              -->   11

        print(“10 + 1”)              -->   10 + 1

        print(“-5.3e - 10” * “2”)       -->   -1.06e-09

        print(“hello” + 1)          -->   ERROR(cannot convert “hello”)

      反过来,当Lua期望一个string而碰到数字时,会将数字转成string。

        print(10 .. 20)        --> 1020

      ..在Lua中是字符串连接符,当在一个数字后面写..时,必须加上空格以防止被解释错。

      尽管字符串和数字可以自动转换,但两者是不同的,像10 == “10”这样的比较是错的。如果需要显示将string转成数字可以使用函数tonumber(),如果string不是正确的数字该函数将返回nil。

        local tb = tonumber({x=10,y=20})

        print(tostring(tb))                 -->  nil

        print(tonumber(“AF”,16))     -->   175

               tonumber函数有两个参数,第二个参数是基数,基数表示数值的进制。

        print(tonumber(“0xA”))        -->   10

               tonumber函数默认基数是十进制

        print(tonumber(true))           -->   nil

               布尔类型不能转换为数值类型

      反之,可以调用tostring()将布尔类型和数字转成字符串,这种转换一直有效:

        print(tostring(10) == “10”)    -->   true

        print(10 .. “” == “10”)          -->   true

        print(tostring(false))             -->   false

        print(tostring(10.0))             -->  10

  • 相关阅读:
    dll相对路径设置
    OPC UA Error: Could not add self-signed certificate to certficate store.
    PB调用C#封装的视频插件中拍照方法不生效的问题
    net反射加载出现错误: ex = {“无法加载一个或多个请求的类型。有关更多信息,请检索 LoaderExceptions 属性。”}
    xtralayout模式下,修改 layOutcontrolgroup分组框表头背景颜色步骤
    abap 本地包 生成请求号
    PB调用SAP的Web Service结构体数组参数方法详解(使用C#调用Web Service生成dll)
    zookeeper NIOServerCnxn: Too many connections from IP- max i
    mysql 10038错误解决方案
    PHP获取文件夹内所有文件包括子目录文件的名称或路径
  • 原文地址:https://www.cnblogs.com/-soy/p/4882145.html
Copyright © 2011-2022 走看看