gpt4 book ai didi

function - 在 Lua 中设置函数原型(prototype)

转载 作者:行者123 更新时间:2023-12-05 00:00:26 24 4
gpt4 key购买 nike

一个简单的问题:如何为尚未实现的功能设置原型(prototype)?

我只是想这样做,因为我指的是一个还不存在的函数。
在 C 中,我们会做这样的事情:

int foo(int bar);

int myint = foo(1);

int foo(int bar)
{
return bar;
}

我如何在 Lua(使用电晕)中做到这一点?

最佳答案

你不能。琥珀的评论是正确的。

Lua 没有类型签名或函数原型(prototype)的概念。
foo的类型是它包含的对象的对象,它是动态的,在运行时会发生变化。可能是 function一瞬间,stringinteger或其他的东西在下。

从概念上讲,Lua 没有像 C 那样的编译步骤。当你说“运行这段代码”时,它开始从顶部开始执行指令,然后向下运行。在实践中,Lua 在执行之前首先将你的代码编译成字节码,但是编译器不会对这样的事情犹豫不决:

greet()

function greet()
print('Hello.')
end

因为 greet 中包含的值在运行时确定。仅当您实际尝试调用(即像函数一样调用) greet 中的值时,在运行时,Lua 会发现它不包含可调用值(函数或表/用户数据,其中元表包含 __call 成员),您将收到运行时错误:“尝试调用全局”问候'(一个零值)“。其中“零值”是任何值 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可以访问它。

关于function - 在 Lua 中设置函数原型(prototype),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10271514/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com