赞
踩
之前的项目开发中有听到同事提及过有一种写法函数在调用时会报错,今天在看书的过程中又看到了,记录下来:
- local funA = function(n)
- if n == 0 then
- return 1
- else
- return n+funA(n-1)
- end
- end
- print(funA(5))
例如上面的代码,我们想求1+2+3+ ... +n的和,定义了一个函数funA,在funA递归调用自己。
我们运行是会发现报错。
lua: FunctionTest.lua:5: attempt to call global 'funA' (a nil value)
funA是个nil值,也就是我们没有定义。
这是因为Lua我们的局部函数funA还没有定义完,因此我们想要调用那么就是个nil,如果这是有个全局的函数funA,那么他会调用全局的那个funA。而非我们想要调用的局部函数funA,如下:
- function funA(n)
- print("我是全局的funA")
- return 1
- end
-
- local funA = function(n)
- if n == 0 then
- return 1
- else
- return n+funA(n-1)
- end
- end
- print(funA(5))
-
- 输出:
- [[--
- 我是全局的funA
- 6
- [Finished in 0.0s]
- --]]
对于这个问题我们可以先定义一个局部变量,然后在定义行数本身。如下:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。