• Lua学习笔记(一):类型和值


      lua是动态类型语言,变量不要类型定义。lua中有8个基本类型分别为:nil、boolean、number、string、userdata、function、thread和table。

      可以通过type测试给定变量或者值的类型。

    1 print(type("Hello world"))        --> string
    2 print(type(10.4*3))                --> number
    3 print(type(print))                --> function
    4 print(type(type))                    --> function
    5 print(type(true))                    --> boolean
    6 print(type(nil))                    --> nil
    7 print(type(type(X)))                --> string

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

    1 print(type(a))    --> nil   ('a' is not initialized)
    2 a = 10
    3 print(type(a))    --> number
    4 a = "a string!!"
    5 print(type(a))    --> string
    6 a = print            -- yes, this is valid!
    7 a(type(a))            --> function

      注意上面的最后两行,我们可以使用function像使用其它值一样使用。

      1、Nil

      Lua中特殊的类型,他只有一个值:nil。一个全局变量没有被赋值以前默认值为nil。给全局变量赋值nil可以删除该变量。

      2、Boolean

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

      3、Number

      表示实数,Lua中没有整数。一般有个错误的看房CPU运算浮点数比整数慢。事实不是如此,用实数代替整数不会有什么误差(除非数字大于100,000,000,000,000)。Lua的numbers可以处理任何长整数不用担心误差。

      4、String

      Lua是8位字节,所以字符串可以包含任何数值字符,包括嵌入的0。这意味着你可以存储任意的二进制数据在一个字符串里。Lua中字符串是不可以修改的,你可以创建一个新的变量存放你要的字符串。

    1 a = "one string"
    2 b = string.gsub(a, "one", "another")    -- change string parts
    3 print(a)            --> one string
    4 print(b)            --> another string

      string和其他对象一样,Lua自动进行内存分配和释放。可以使用单引号或者双引号表示字符串。对于字符串中含有引号情况还可以使用转移符来表示。

     1 a = "a line"
     2 b = 'another line'
     3 
     4 --Lua中的转移符
     5 a bell
     6  back space                     -- 后退
     7 f form feed                    -- 换页
     8 
     newline                        -- 换行
     9 
     carriage return            -- 回车
    10 	 horizontal tab                -- 制表
    11 v vertical tab
    12 \ backslash                     -- ""
    13 " double quote                -- 双引号
    14 ' single quote                -- 单引号
    15 
    16 [ left square bracket         -- 左中括号
    17 ] right square bracket         -- 右中括号

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

     1 page = [[
     2 <HTML>
     3 <HEAD>
     4 <TITLE>An HTML Page</TITLE>
     5 </HEAD>
     6 <BODY>
     7 Lua
     8 [[a text between double brackets]]
     9 </BODY>
    10 </HTML>
    11 ]]

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

    1 print("10" + 1)                --> 11
    2 print("10 + 1")                --> 10 + 1
    3 print("-5.3e - 10" * "2")    --> -1.06e-09
    4 print("hello" + 1)            -- ERROR (cannot convert "hello")
    5 
    6 print(10 .. 20)        --> 1020

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

     1 local line = "jjj"            
     2 n = tonumber(line)        -- try to convert it to a number
     3 if n == nil then
     4     print(line .. " is not a valid number")
     5 else
     6     print(n*2)
     7 end
     8 
     9 print(tostring(10) == "10")        --> true
    10 print(10 .. "" == "10")            --> true

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

      5、Function

      函数是第一类值(和其他变量相同),意味着函数可以存储在变量中,可以作为函数的参数,也可以作为函数的返回值。Lua可以调用lua或者C实现的函数,Lua所有标准库都是用C实现的。标准库包括string库、table库、I/O库、OS库、算术库、debug库。

      6 Userdata and Thread

      userdata可以将C数据存放在Lua变量中,userdata在LUa中除了赋值和相等比较外没有预定义的操作。userdata用来描述应用程序或者使用C实现的库创建的新类型。thread以后在介绍。

  • 相关阅读:
    利用.net Core 对程序集中的类 进行统一依赖注入
    接口中定义异步的方法
    在efcore 中创建类 通过实现IEntityTypeConfiguration<T>接口 实现实体类的伙伴类 实现FluentApi
    在vs2017 版本15.7.6中不支持2.1.0以上版本的net core sdk
    在.net core不同的版本中 webabi引用的包不同
    SQL语句中使用Group by
    DDD实战12 值对象不创建表,而是直接作为实体中的字段
    src与href的区别。
    cookies,sessionStorage 和 localStorage 的区别
    javascript阻止事件冒泡和浏览器的默认行为
  • 原文地址:https://www.cnblogs.com/atong/p/3835947.html
Copyright © 2020-2023  润新知