一个简单的问题:如何为尚未实现的功能设置原型?
我只是想这样做,因为我指的是一个还不存在的函数。在 C 中,我们会做这样的事情:
int foo(int bar);
int myint = foo(1);
int foo(int bar)
{
return bar;
}
我如何在 Lua(使用电晕)中做到这一点?
你不能。琥珀的评论是正确的。
Lua 没有类型签名或函数原型的概念。
的类型foo
是它包含的对象的类型,它是动态的,在运行时会发生变化。它可能function
在某一瞬间发生,string
或者integer
在下一瞬间发生。
从概念上讲,Lua 没有像 C 那样的编译步骤。当你说“运行这段代码”时,它开始从顶部开始执行指令,然后向下运行。在实践中,Lua 在执行之前首先将你的代码编译成字节码,但是编译器不会对这样的事情犹豫不决:
greet()
function greet()
print('Hello.')
end
因为其中包含的值greet
是在运行时确定的。只有当你在运行时实际尝试调用(即像函数一样调用)中的值greet
时,Lua 才会发现它不包含可调用值(函数或表/用户数据,其元表包含一个__call
成员)你会得到一个运行时错误:“尝试调用全局'greet'(一个零值)”。其中“nil value”是greet
尝试调用时包含的任何值。在我们的例子中,它是nil
.
因此,您必须确保foo
在尝试调用之前调用了创建函数并将其分配给的代码foo
。
如果您认识到这一点可能会有所帮助:
local myint = foo(1)
function foo(bar)
return bar
end
是语法糖吗:
local myint = foo(1)
foo = function(bar)
return bar
end
foo
正在被分配一个函数值。这必须在您尝试调用该函数之前发生。
main
函数开始“执行时间”。
例如:
function main()
greet()
end
function greet()
print('Hello.')
end
main()
正如greet
在 中声明的那样_G
,main
可以访问它。