Lua—基础分析(数据类型和函数)

原创 2015年07月07日 10:43:33

ps:小编是一名cocos2d学习者(不能说是开发者,毕竟小编还是处于学习过程),前段时间小编是学习的cocos2d-x的,但是由于市面上大部分公司采用了lua的开发模式,因此小编不得不往cocos2d-lua方向转。由于小编是初学者,因此记录的只是我学习过程中的遇到的问题。

table 表:  

   table是lua中最重要的一种数据类型(准确的不应该称为类型,用集合更加形象的说明,或者是一个关联数组)。
  关联数组:就是采用索引index-value模式,将索引(除nil的任何类型,因此table可是采用嵌套)和对应的值相关联。
   创建:  a = {} / a={1="first", 2 = "second", "a" = 3}; tabel是一种动态分配的对象,程序仅持有一个对它的引用或指针,因此创建的时候不会生成table的副本或创建新的table,因此不需要对其进行声明。
   表示:    操作table中元素的方法有a["x"]和a.x两种方法;区别:a["x"]表示采用字符串“x”来索引table;a.x表示采用变量x来索引table  

a={}  
k="X"
a[k]=10;
a[20]="great"
print(a[k])     --10
print(a["X"])  -- 10
k=20;
print(a[k])     --greate
a["X"]=a["X"]+1;  -- 21
print(a["X"])
print(a.X)  --a.X表示的是以字符串“X”索引table,  a[k]是表示用变量k的值来索引table
print(a.k)  --因为字符串“K”是未定义的值,因此是输出的nil
#:  返回一个线性数组或table中的最后一个元素的索引值,可以理解为获取的是其的长度:  print(a[#a])打印a中的最后一个元素的值 

操作符

   算术操作符:左值=右值(左值:用于表示变量在内存存储中的地址; 右值:表示该地址内存中的存储的值) 。

   关系操作符:关系操作符返回的结果都是true或false; 在处理table、函数、userdata,lua采用的是引用的比较方式(即:只有当它们引用同一个对象时,才认为相等)。     

   逻辑操作符:and、or或not 。

        and:第一个操作数为false,则返回第一个操作数;否则返回第二个操作数;         

        or:  第一个操作数为true,则返回第一个操作数;否则返回第二个操作数;      

    注释:从上面and和or的判断条件都是按照第一个操作数,因此我们称这种为“短路求值”,表示只有需要时才会去评估第二个操作数。 例如:“x=x or v” 表示: if not x then x = v end

函数:

     1.Lua中的函数属于第一类值(可以理解为是一种特殊的变量);   函数实际上是在讨论一个持有该函数的变量;   

     2.匿名函数:可以将function(x)   --body  end 视为一种函数的构造表达式(如table的构造是{}一样),然后将函数的构造式的结果称为“匿名函数”。                         

                           function derivative(f, delta)
                                delta = delta or 1e-4
                                return function (x)   --function(x)是匿名函数
                                      return (f(x + delta) - f(x))/delta
                                end
                            end

                            c = derivative(math.sin)  --derivative是高阶函数(将函数作为其实参的传入值)
                            print(c(10))

     3.闭合函数(closure):在运行时,每当Lua执行一个形如function...end 这样的表达式时,它就会创建一个新的数据对象,其中包含了相应函数原型的引用、环境    (environment,用来查找全局变量的表)的引用 以及一个由所有upvalue引用组成的数组,而这个数据对象就称为闭包。由此可见,函数是编译期概念,是静态的,而闭包是运行期概念,是动态的。
       非局部变量:表示一个变量既能被匿名函数访问到,又能被外层函数访问到。通俗的讲,closure就是一个函数加上该函数所需访问的所有“非局部变量”。
                    function newCounter()
                          local i = 0   --i 是非局部变量
                        return function ()  --返回closure
                          i = i+1
                               return i
                        end
                    end
         参见博客可以帮助理解:http://blog.csdn.net/lidatou/article/details/3866399
  4.非全局的函数          
local fact = function(n)
    if n==1 then 
       return 1
    else 
       return fact(n-1)   --error:调用fact(n-1)时,局部的fact(n-1)尚未定义完毕,因此这里调用的是一个全局的fact(因此会报fact为nil的错误)
end
                    
解决:
local fact 
    fact = function(n)        --这种其实是局部函数local function fact(n) 展开的‘语法糖’;特别注意在间接调用(如间接递归)的时候,要使用前置声明
       if n==1 then 
          return 1
       else 
          return fact(n-1)  --此时调用的fact是局部变量,虽然在函数定义时,这个局部变量的值尚未完成定义,但在函数执行后,fact肯定有了正确的值                       
end
   5.尾调用
       含义:函数在执行“尾调用”之后,程序也不需要保存任何有关于函数的栈的信息,跟goto语句类似。主要是为了改变当前的状态。
       表现形式:Lua中只有 "return <func>(<args>)"也就是只有"return 函数名(参数)"的调用形式才算是一条“尾调用”,没有多余的操作。
       作用:因为“尾调用”不耗费栈空间,可以实现"尾调用消除";

相关文章推荐

Lua学习之function

第五章 Lua学习笔记之函数   函数有两个用途 1.      完成指定功能,函数作为调用语句使用 2.      计算并返回值,函数作为赋值语句的表达式使用 func...

Lua学习笔记(二):Lua中的类型介绍

概述:     Lua是一种动态类型的语言,在语言中没有类型定义的语法,每个值都“携带”了他自身的类型信息,我们可以用 type()函数来检查起类型。          lua支持的类型:lua总...
  • Andy_93
  • Andy_93
  • 2017年03月30日 23:12
  • 442

lua学习之table类型

关系表类型,这是一个很强大的类型。我们可以把这个类型看作是一个数组。只是 C语言的数组,只能用正整数来作索引; 在Lua中,你可以用任意类型的值来作数组的索引,但这个值不能是 nil。同样,在C语言中...
  • booirror
  • booirror
  • 2012年08月18日 22:23
  • 55030

lua 的基本数据类型和函数应用 . :符号的区别

主要记录:从lua的基本数据类型等基础知识到工作中的运用所遇到一些问题,希望自己可以坚持下来,在2017年能做的更好。同时也巩固自己的技术水平。...

0基础lua学习(二) 数据类型

1.  命名规范 a)    区分大小写 b)   不要使用关键字命名 c)     数字、字母、下划线、不要以数字开头,避免以下划线开头,或者后面是大写字母的命名 2.  类型与值 a)   ...

Lua 基础之数据类型

Lua 有 nil,boolean,number,string,table,function 和 userdata 七种数据类型。我们可以用 type() 函数来返回一个变量的类型,返回值是 stri...

Lua 数据类型以及函数应用简明教程

Lua 数据类型以及函数应用简明教程 数据类型  Lua是动态类型语言,变量不要类型定义,只需要为变量赋值。 值可以存储在变量中,作为参数传递或结果返回。在默认情况下,变量总是认为是全局的。...

Java基础语法(一)—标识符、关键字、常变量、数据类型

一、标识符1. 定义 在java语言中,对各种变量、方法和类等要素命名时所使用的字符序列就是标识符。 2. 使用规范 (1) 使用26个英文字母大小写,数字0-9,符号 _ 和 $ (2...

java基础篇(一)————基本数据类型

Java四类八种数据类型: 数据类型分类: 第一类:逻辑型boolean 第二类:文本型char 第三类:整数型(byte、short、int、long) char类型占...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Lua—基础分析(数据类型和函数)
举报原因:
原因补充:

(最多只允许输入30个字)