`

Lua学习(五)函数进阶篇

    博客分类:
  • lua
 
阅读更多
第一类值:在lua中,函数与其它数据类型(数字,字符串)一样,可以存放在变量中,可以存放在table中,可以作为实参,还可以作为函数返回值

词法域:嵌套的函数可以访问他外部函数的变量

非局部变量:
names = {"kate", "john"}
grades = {kate = 6, john = 9}
function sortbygrade(names,grades)
    table.sort(names,function(n1,n2)
       return grades[n1]>grades[n2]
    end)
end

grades是sortbygrade函数的局部变量,但传递给table.sort的匿名函数却可以访问grades,在这个匿名函数内部,grades不是全局变量也不是局部变量,称为“非局部的变量”

1、闭包(closure)
定义:一个函数加上该函数所需访问的所有“非局部变量”
function newCounter()
    local i = 0
    return function()
              i = i + 1
              return i
           end
end

c1 = newCounter()
print(c1())    --->1
print(c1())    --->2

c2 = newCounter()
print(c2())   ---->1
print(c1())   ---->3

c1 c2是同一个函数所创建的两个不同闭包,各自拥有独立的局部变量i的实例


2、非全局的函数
local f = function(arg)
...
end 等效于

local function f(arg)
...
end

也等效于
local f
f = function(arg)
...
end

3、正确的尾调用:不耗费栈空间
只有:return <func>(<arg>) 这样的形式才是尾调用
return g(x) + 1       -->必须做一次加法操作:不是尾调用
return (g(x))         -->必须调整一个返回值:也不是尾调用
return g(x)           -->正确的尾调用
分享到:
评论

相关推荐

    LUA进阶源代码欣赏

    "LUA进阶源代码欣赏"是一个面向LUA初学者和有一定经验的开发者的学习资源,旨在通过分析和解读源代码,提升对LUA语言深入理解和应用的能力。 1. **函数与表** LUA中的函数是一等公民,可以作为变量存储、作为参数...

    王桂林--lua.pdf

    在学习Lua之前,建议具备一定的编程基础,了解基本的编程概念,如变量、函数、循环等。此外,熟悉C语言或其他高级语言也有助于更好地理解Lua的特性和使用方式。 通过上述介绍,我们了解到Lua不仅是一门功能强大的...

    Lua语法进阶,Lua入门

    Lua 语言进阶教程 - 语法基础和运算符重载 Lua 语言是一种轻量级的脚本语言,广泛应用于游戏开发、嵌入式系统和其他领域。为了深入掌握 Lua 语言,需要了解其语法基础和运算符重载。 Lua 语法基础 Lua 语言的语法...

    lua学习资料lua学习资料lua学习资料lua学习资料lua学习资料

    本资源包是针对Lua语言的学习资料集合,旨在帮助初学者和进阶者深入理解并掌握Lua编程。 首先,从标题和描述中我们可以看出,这个资料包专门针对Lua学习,反复提及“lua学习资料”,表明其内容可能包括教程、示例...

    lua学习库文档资料

    Lua是一种轻量级的脚本语言,广泛应用于游戏开发、嵌入式系统和服务器配置等领域。这个"lua学习库文档资料"压缩包包含了对Lua语言关键部分的...因此,这个压缩包提供的文档资料是Lua初学者和进阶者不可多得的学习资源。

    Lua学习框架代码

    这个"Lua学习框架代码"提供了一个基础的学习平台,帮助初学者更好地理解和掌握Lua编程。下面将详细介绍Lua的一些核心概念和特性,以及如何通过这个框架进行学习。 1. Lua的基础语法: - 变量:Lua中的变量没有类型...

    龙灵修-讲Lua的cocos2d-x进阶视频.rar

    cocos2d-x进阶教程1_4Lua中函数、条件判断语句.mp4 cocos2d-x进阶教程1_5Lua中循环语句和逻辑运算关键字.mp4 cocos2d-x进阶教程1_6LuaTable使用1.mp4 cocos2d-x进阶教程1_7LuaTable使用2.mp4 cocos2d-x进阶教程1_8...

    LUA学习资源

    2. **PPT**: PPT可能包含LUA基础语法、进阶特性、在Unity中的应用案例等内容,是系统学习和复习的好资料。 3. **工具**: 工具可能包括LUA编辑器、调试器、性能分析工具等,这些工具能帮助开发者更有效地编写和调试...

    lua学习课件

    通过这些材料,你可以系统地学习Lua的语法、数据类型、控制结构、函数、表(Lua的核心数据结构)以及模块和包的使用。 在描述中提到“很详细”,意味着这些课件可能包含了从基础知识到进阶主题的全面讲解,比如元表...

    LUA脚本练习工具,不太讲究的话,效果还可以

    这款"lua练习器"是用易语言编写的,为初学者和进阶者提供了方便的环境来练习和测试LUA代码。 在LUA中,语法简洁明了,其主要知识点包括: 1. 变量与数据类型:LUA支持五种基本数据类型,即nil、boolean(布尔型)...

    Lua进阶教程(五)数据库编程.pdf

    # Lua进阶教程(五)数据库编程知识点解析 ## 一、引言 在软件开发过程中,数据库的应用极为广泛,特别是在需要存储大量数据且要求高效处理的场景中。`Lua`作为一种轻量级且易嵌入的脚本语言,在游戏开发、系统...

    lua学习源码.zip

    这个"lua学习源码.zip"压缩包包含了多个与Lua编程相关的源代码文件,覆盖了从基础到进阶的主题,有助于深入理解Lua的语法和特性。 首先,让我们逐一解析这些文件名中的知识点: 1. **03_字符串操作.lua**:这个...

    Lua 进阶教程(一)调试

    ### Lua 进阶教程(一)调试 #### 引言 在软件开发过程中,调试是一项不可或缺的技能。Lua作为一种简洁高效、易于嵌入的脚本语言,在游戏开发、Web应用等多个领域有着广泛的应用。Lua虽然小巧,但在调试方面却提供...

    lua学习资料 实现java与c c++程序集成

    7. **Lua中文教程**:压缩包中的“Lua中文教程”可能是对Lua语言进行全面讲解的文档,包括基础语法、进阶特性、集成实践等内容,是学习和掌握Lua的好资源。 总之,通过学习和实践Lua,开发者能够有效地将脚本语言的...

    Lua教程&手册

    **正文** Lua是一种轻量级的、嵌入式的脚本语言,主要...提供的“Lua电子教程”文件应该包含更多细节,包括实例代码和解释,是学习和进阶Lua的好资源。建议读者结合此教程,逐步探索和实践,从而更好地理解和运用Lua。

    Beginning Lua Programming电子书

    #### 五、如何有效学习Lua - **阅读官方文档**:官方文档是学习任何编程语言的最佳起点。 - **实践操作**:理论知识结合实际编程练习才能真正掌握一门语言。 - **参与社区**:加入Lua相关的论坛或社群,与其他开发者...

    Lua进阶教程(四)Web编程.pdf

    通过本教程的学习,我们了解了Lua在Web开发中的应用,特别是在使用Orbit框架构建复杂Web应用时的方法和技巧。Lua作为一种灵活的语言,在Web开发中展现出巨大的潜力。希望本教程能帮助读者更好地掌握Lua Web开发的...

    [Lua语言]Lua语言入门

    这篇博客没有提供具体描述,但我们可以从标签中推测内容可能涵盖了Lua语言的基础元素和一些进阶特性。"源码"可能涉及Lua的源代码解析,"工具"可能涵盖使用Lua作为工具脚本的情况。 【标签】: 1. **源码**:在学习...

Global site tag (gtag.js) - Google Analytics