2 zhanghaodx082 zhanghaodx082 于 2016.04.11 21:45 提问

求关于lua尾调用概念疑问 5C

lua初学者,看programming in lua一书中写道:“Lua中类似return g(...)这种格式的调用是尾调用。但是g和g的参数都可以是复杂表达式,因为Lua会在调用之前计算表达式的值。例如下面的调用是尾调用:return x[i].foo(x[j] + a*b, i + j)”

但是,另外几个例子中却不是尾调用,如下都不是尾调用
return g(x) + 1 -- must do the addition
return x or g(x) -- must adjust to 1 result
return (g(x)) -- must adjust to 1 result

求解释区别???

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
lua程序性能优化(尾调用)
function func()     local value = math.abs(1)     return value end function func1()     local value = func()     return value end func1() 不使用尾调用的函数编译后指令如下: F:\>luac -l a.lua main (7
Lua 函数、闭包、尾调用总结
Lua 函数、闭包、尾调用总结。
Lua函数的尾调用
1. 尾调用 所谓尾调用,就是一个函数返回另一个函数的返回值: 代码如下: function f() … return g() en 因为调用g()后,f()中不再执行任何代码,所以不需要保留f()的调用桟信息;Lua做了这样的优化,称为"尾调用消除",g()返回后,控制点直接返回到调用f()的地方。 这种优化对尾递归非常有益,通常递归意味着调用桟的不断增长,甚至可能造成堆栈溢出;而尾递
尾调用与尾递归
尾调用(Tail Call)是函数式编程的一个重要概念,本文介绍它的含义和用法。 一、什么是尾调用? 尾调用的概念非常简单,一句话就能说清楚,就是指某个函数的最后一步是调用另一个函数。 function f(x){ return g(x); } 上面代码中,函数f的最后一步是调用函数g,这就叫尾调用。 以下两种情况,都不属于尾调用。 //
正确地尾调用
Lua支持“尾调用消除” 当一个函数调用是另一个函数的最后一个动作时,该调用才算是一条“尾调用”, 以下代码对g的调用就是一条“尾调用”:     function  f(x)  return g(x)  end 也就是说,当f调用完g之后就再无其他事情可做了,因此在这种情况中,程序就不需要返回那个“尾调用”所在的函数了。 所以在“尾调用”之后,程序也不需要保存任何关于该函数的栈信息了。
lua--函数深入:闭合函数,局部函数,尾调用
lua函数具有两大特征:函数作为第一类值,函数具有特定的词法域(Lexical Scoping) 所谓第一类值:代表函数和其他传统类型的值是等价的(例如数字和字符串),函数可以同他们一样存储在变量,table中,可以作为实参传递,可以作为函数返回值。 对于第一类值,需要讲明,函数和其他值一样都是匿名的,是没有名字的。而我们平时所说的函数名,如print(),都只是一种语法糖,一个持有某个函数的
lua闭包和尾调用
虽然工作已经基本上没有什么变动了,但是想起来面试的时候,总是屡试不爽的这么个问题。乘着这会儿空闲还是写下来,留作备用。也希望可以帮助到刚出来找Lua方面的工作的童鞋。 其实都是一些基础的东西,只是自己记性不好,还是写下来比较妥当。这样,忘记的时候,还可以回头看看。 1.lua闭包--[[@ lua闭包: 从形式上来讲:子函数可以使用父函数中的局部变量,这种行为就叫做闭包!
深入理解Lua的闭包一:概念、应用和实现原理
本文首先通过的例子讲解了Lua中闭包的概念,然后总结了闭包的应用场合,最后探讨了Lua中闭包的实现原理。 闭包的概念 在Lua中,闭包(closure)是由一个函数和该函数会访问到的非局部变量(或者是upvalue)组成的,其中非局部变量(non-local variable)是指不是在局部作用范围内定义的一个变量,但同时又不是一个全局变量,主要应用在嵌套函数和匿名函数里,因此若一个闭包没有会
快速掌握Lua 5.3 —— 调试库 (1)
Q:什么是活动函数? ---------- A:程序中被调用但还未执行完成的函数。 ``` function g() --[[ 此时函数"g"被调用但还未执行完成,是活动函数。所以这里获取的是函数"g"的信息。 "debug.getinfo(2)"获取的才是函数"f"的信息。]] local x = debug.getinfo(1, "n") for k, v in pairs(x) d
五、Lua中的闭包
Lua中的闭包|果冻想 本文是对于“果冻想”的《Lua入门系列》所作笔记,原文来自上面链接。 什么是闭包 闭包是由函数和与其相关的引用环境组合而成的实体: function newCounter( ) local i = 0 return function ( ) i = i + 1 return i endendc1 = newCounter()pri