2 qq 22701383 qq_22701383 于 2017.01.15 11:16 提问

lua 局部函数的使用问题

local fact = function (n)
if n == 0 then
return 1
else
return n*fact(n-1) -- buggy
end
end

为什么上面这种方式导致Lua编译时遇到fact(n-1)并不知道他是局部函数fact?而是去查找是否有相应的全局变量。

1个回答

dabocaiqq
dabocaiqq   2017.01.21 22:56
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
lua源码分析之局部函数的定义
第1章 续(11-3) 第二节 局部函数的声明          前面研究了局部变量的定义,下面就研究下,lua中局部函数定义的方法。            其中局部函数定义的语法是:     local function FuncName (parlist) chunk END            首先,lua会检测到local function这两个关键字,知道后面是在定义局部
lua--函数深入:闭合函数,局部函数,尾调用
lua函数具有两大特征:函数作为第一类值,函数具有特定的词法域(Lexical Scoping) 所谓第一类值:代表函数和其他传统类型的值是等价的(例如数字和字符串),函数可以同他们一样存储在变量,table中,可以作为实参传递,可以作为函数返回值。 对于第一类值,需要讲明,函数和其他值一样都是匿名的,是没有名字的。而我们平时所说的函数名,如print(),都只是一种语法糖,一个持有某个函数的
Lua函数式编程和局部函数详解
函数做一个First-Class Value可以赋值给变量,用后者进行调用: 代码如下: a = function() print 'hello' end a() hello b = a b() hello 匿名函数 代码如下: g = function() return function() print'hello' end end g()() hello 函数g返回一
Lua 中,将全局函数声明为local的优缺点
在openresty框架下面进行开发,lua语言的技巧 1.如果是一些经常用到的全局函数,可以申明为local局部变量,这样可以提升效率。 例如ipairs,pairs申明成local的,原因是local变量是存放在lua的堆栈里面的是array操作,而全局变量是存放在_G中的table中,效率不及堆栈 如果被多次执行调用的全局变量,就需要考虑用local来申明 2.loadfile()只会
lua学习笔记---作用域
块,作用域全局和局部,默认情况下,为全局变量,除非特殊说明是局部代码中 do……end块内定义的变量无法被外部访问,同时任何在外围定义的局部变量也无法被内部访问。 强制转换 根据特定的转换规则(如果可能的话),将字符串转换成数字,从而在字符串和数字之间实现算术运算的过程这里先将b转换成数字,然后再与a的值相加从而得到结果但是,如果希望两个字符串相加可以得到字符串连接的话,那么需要用到所谓的lua中
lua函数递归
我们先从一个错误的实例开始我们的讨论 local fact = function (n) if n == 0 then return 1 else return n*fact(n-1) end 上面这种方式导致 Lua 编译时遇到 fact(n-1)并不知道他是局部函数 fact,Lua 会去查找是否有这样的全局函数 fact。为了解决这个问题我们必须在定义函数以前先声明
lua的全局变量、局部变量、函数闭包和非局部变量(upvalue)
我们知道lua脚本语言的变量是弱类型的,即变量没有类型,值才有类型,同一名称的变量具体类型要看所赋值的类型,如下 a=1 --整型 a=1.0 --浮点型 a="ab" --string型 a={} --table型 a=function() ... end --function型 全局变量和局部变量,类似于shell脚本 全局变量:顾名思义,其生命有效期是全局的,整个lua
全局和局部函数
全局和局部函数            全局和局部函数是为了支持16bit的程序移植,或者是为了维护程序对16bit Windows的兼容性。从32bit Windows起,全局函数和局部函数的实现是封装一个相关的堆函数,这个堆函数用进程的默认堆的句柄。因此全局和局部函数比其它内存管理函数开销更大。        堆函数比全局和局部函数提供更多的特征和控制。新的程序应该使用堆函数除非文档特别地
lua 中调用函数的坑点
今天在工作中遇到一个神奇的问题,是我之前使用lua没有遇见过的,具体情况是这样的: 一个叫RankList的lua模块,有一个GetRankList(rank_type,rank_sub_type)的函数 需要在UIRankList的lua模块中调用这个函数。 即: 这个RankType.RT_QUALIFYING_NEW_STATS 的类型是userdata,是在
lua中的全局变量与局部变量与块
1.全局变量:     全局变量不需要声明,只需要直接给赋值即可。当然删除一个全局变量喜欢只需要将他赋值为nil即可。换句话说如果存在一个全局变量必然具有一个非nil值。 2.局部变量    用local声明,其作用域仅限于声明他们的那个块。这个块可以是局部控制结构,function以及chunk1。  例子: chunk1:         需要注意的