当前位置:   article > 正文

Lua函数调用报错_attempt to call global

attempt to call global

之前的项目开发中有听到同事提及过有一种写法函数在调用时会报错,今天在看书的过程中又看到了,记录下来:

  1. local funA = function(n)
  2. if n == 0 then
  3. return 1
  4. else
  5. return n+funA(n-1)
  6. end
  7. end
  8. 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,如下:

  1. function funA(n)
  2. print("我是全局的funA")
  3. return 1
  4. end
  5. local funA = function(n)
  6. if n == 0 then
  7. return 1
  8. else
  9. return n+funA(n-1)
  10. end
  11. end
  12. print(funA(5))
  13. 输出:
  14. [[--
  15. 我是全局的funA
  16. 6
  17. [Finished in 0.0s]
  18. --]]

对于这个问题我们可以先定义一个局部变量,然后在定义行数本身。如下:

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/859058
推荐阅读
相关标签
  

闽ICP备14008679号