Lua学习笔记之数据类型

时间:2022-10-03 19:15:44

从本篇博客开始研究一下Lua,现在的Lua真得是很火,因为Cocos2d-x写游戏的时候会用到,所以就拿过来学学吧,先从基础的语法开始,然后慢慢的深入。本人也是刚刚学习,希望和学习Lua的大家交流,博客权当笔记,有错误之处还请赐教。

当然首先是开发环境了,我的学习背景是Cocos2d-x,所以下载了最近发布的Cocos Code IDE版本,我们可以在Cocos Code IDE上边新建工程,然后写Lua测试代码,关于Cocos Code IDE的使用官方有不少的教程,这里就不说了。当然你也可以在控制台下写一些Lua命令,这种和命令行交互的方式比较适合简单的测试,需要做得工作是下载Lua,然后在控制台敲入Lua,在Mac下下载Lua只需要敲入命令brew install lua就搞定了,如果你没有安装brew,就先安装一下brew,最后如图所示代表你就成功了。

Lua学习笔记之数据类型

环境搭建好了以后就开始来接触一下这个脚本语言吧。首先是最基础的Lua类型,下面一一介绍。

  1. --nil 
  2. --Lua中特殊的类型,他只有一个值:nil,一个全局变量没有被赋值以前默认值为nil,给全局变量负nil可以删除该变量。 
  3. print(i) 
  4. i = nil 
  5.   
  6. --booleans 
  7. --两个取值falsetrue。但要注意Lua中所有的值都可以作为条件。在控制结构的条件中除了false和nil为假, 
  8. --其他值都为真。所以Lua认为0和空串都是真。 
  9.   
  10. --numbers 
  11. --表示实数,Lua中没有整数。用实数代替整数不会有什么误差(除非数字大于100,000,000,000,000)。Lua的numbers可以处理任何长整数不用担心误差。 
  12.   
  13. --strings 
  14. --字符串类型,Lua中字符串是不可以修改的,你可以创建一个新的变量存放你要的字符串 
  15. local a = "hello lua" 
  16. local b = string.gsub(a,"hello","hi"
  17. print(a) 
  18. print(b) 
  19.   
  20. --可以使用单引号或者双引号表示字符串 
  21. a = "a line" 
  22. b = 'another line' 
  23.   
  24. --lua同样支持转义字符 
  25. --\a bell 
  26. --\b back space    -- 后退 
  27. --\f form feed    -- 换页 
  28. --\n newline     -- 换行 
  29. --\r carriage return   -- 回车 
  30. --\t horizontal tab   -- 制表 
  31. --\v vertical tab 
  32. --\\ backslash     -- "\" 
  33. --\" double quote    -- 双引号 
  34. --\' single quote    -- 单引号 
  35.   
  36. --还可以使用[[...]]表示字符串。这种形式的字符串可以包含多行,也可以嵌套且不会解释转义序列, 
  37. --如果第一个字符是换行符会被自动忽略掉。 
  38. local code = [[ 
  39.   
  40. \b back space    -- 后退 
  41. \f form feed    -- 换页 
  42. \n newline     -- 换行 
  43. ]] 
  44. print(code) 
  45.   
  46. --运行时,Lua会自动在string和numbers之间自动进行类型转换,当一个字符串使用算术操作符时, 
  47. --string就会被转成数字。 
  48. print("10" + 1)    --> 11 
  49.   
  50. --当Lua期望一个string而碰到数字时,会将数字转成string。..是字符串连接符,将字符串连接起来,当连接俩个数字 
  51. --的时候,注意数字后边要有空格 
  52. print(10 .. 20)  --> 1020 
  53.   
  54. --如果需要显式将string转成数字可以使用函数tonumber(),如果string不是正确的数字该函数将返回nil。 
  55. --反之,可以调用tostring()将数字转成字符串,这种转换一直有效 
  56. print(1+tonumber(2)) -->3 
  57. print(tostring(100)) -->100 
  58.   
  59. --function 
  60. --函数是第一类值(和其他变量相同),意味着函数可以存储在变量中,可以作为函数的参数,也可以作为函数的返回值。 
  61.   
  62. --Userdata and Threads 
  63. --userdata就是用户数据类型,指的是自己定义的类型,userdata在Lua中除了赋值和相等比较外没有预定义的操作 
  64. --thread代表线程 
  65.   
  66. --table表 比较重要 以上三个数据类型在其他博客说明 
  67.   
  68. --变量的作用域 
  69. --全局变量不需要声明,给一个变量赋值后即创建了这个全局变量,访问一个没有初始化的全局变量也不会出错, 
  70. --只不过得到的结果是:nil. 
  71. print(i) -->nil 
  72. --声明一个局部变量使用local 局部变量只在局部代码块中有效,比如在循环中,if语句中,do end代码块中 
  73. --我们应该尽可能的使用局部变量 
  74. local j = 1 
  75. do 
  76.  local k = 1 
  77. end 
  78. print(k) -->nil 
  79.   
  80. --标示符 
  81. --字母(letter)或者下划线开头的字母、下划线、数字序列.最好不要使用下划线加大写字母的标示符,因为Lua的保留字也是这样的。 
  82.   
  83. --注意:Lua是大小写敏感的. 
  84. --注释:单行注释:-- 
  85. --多行注释:--[[ --]]