Lua:如何在函数定义之前调用函数?
2016-3-31 15:43:30
收藏:0
阅读:292
评论:3
如何在代码中定义一个函数并在后面添加实现?
大致如下:
- 定义函数
doX - 在代码的后面调用
doX doX的实现(即在文件底部的所有函数)
点赞
用户734069
哦...那么在实际定义函数之前,真的没有办法调用 funcName 吗?也就是说,在第一次调用 funcName 之前,您仍然需要确保先调用 defineIt?
我想澄清这一点,并且我觉得回答比评论更好。
Lua是比C或C++简单得多的语言。它建立在一些简单的基础之上,并具有一些语法糖,使它的某些部分更容易接受。
在Lua中不存在“函数定义”这样的东西。函数是一级对象。它们是Lua中的值,就像数字28或字符串文字“foo”一样都是值。 “函数定义”只是将一个值(即函数)设置到变量中。变量可以包含任何类型的值,包括函数值。
“函数调用”只是从变量中获取值并尝试调用它。如果该值是函数,则使用给定的参数调用函数。如果该值不是函数(或具有 __call 元方法的表/用户数据),则会发生运行时错误。
你无法调用尚未设置到变量中的函数,就像你不能这样做一样:
local number = nil
local addition = number + 5
number = 20
并期望 addition 中有25。这是不可能的。因此,出于相同的原因,您不能这样做:
local func = nil
func(50)
func = function() ... end
正如Paul所指出的那样,您可以在定义的另一个函数内调用函数。但是在用它需要包含的内容填充该变量之前,您无法_执行_调用它的函数。
2012-09-06 03:36:20
用户221509
如其他人所写,你在运行时不能调用没有事先被赋值的函数。你必须明白:
function myFunc() print('Something') end
只是这个的语法糖:
myFunc = function() print('Something') end
现在,这种代码不按你想象的那样运行是有道理的:
print(greeter(io.read())) -- attempt to call global 'greeter' (a nil value)
function greeter(name) return 'Hello '..name end
当你使用greeter变量时,它的值是nil,因为它的值只在下一行设置。
但是,如果你想在上面有你的“主”程序而在下面有函数,有一个简单的方法可以做到:创建一个“主”函数,并把它作为底部的最后一个调用。当函数被调用时,所有的函数将会被设置到相应的全局变量:
-- 程序开始,将你的主要代码放在源代码的顶部
function main()
local name = readName()
local message = greeter(name)
print(message)
end
-- 在main下面定义函数,但是还没有调用main,
-- 所以不会出现任何错误
function readName() io.write('Your name? '); return io.read() end
function greeter(name) return 'Hello, ' .. name end
-- 在这儿调用main,所有函数都已经被分配,
-- 所以这将不会出现任何问题
main()
2012-09-06 10:39:18
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
你只需要有一个变量来引用。
local funcName对于你的目的来说足够了,有一个注意事项。这样做是可行的:local funcName function callIt() print(funcName()) end function defineIt() funcName = function() return "My Function" end end defineIt() callIt()只要在调用之前定义它(
defineIt),它应该像预期的那样工作。但是你不能这样做(这就是注意事项):local funcName print(funcName()) funcName = function() return "My Function" end你将获得一个错误:
attempt to call local 'funcName' (a nil value)。