加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

在Lua中设置函数原型

发布时间:2020-12-14 21:45:33 所属栏目:大数据 来源:网络整理
导读:一个简单的问题:如何为尚未实现的函数设置原型? 我只是想这样做,因为我指的是一个不存在的功能(还). 在C中,我们会做这样的事情: int foo(int bar);int myint = foo(1);int foo(int bar){ return bar;} 我怎么在Lua(带电晕)这样做? 解决方法 你不能. Ambe
一个简单的问题:如何为尚未实现的函数设置原型?

我只是想这样做,因为我指的是一个不存在的功能(还).
在C中,我们会做这样的事情:

int foo(int bar);

int myint = foo(1);

int foo(int bar)
{
     return bar;
}

我怎么在Lua(带电晕)这样做?

解决方法

你不能. Amber的评论是正确的.

Lua没有类型签名或函数原型的概念.

foo的类型是它包含的对象的类型,它是动态的,在运行时更改.它可以在一个瞬间起作用,在下一个瞬间可以是字符串或整数或其他东西.

从概念上讲,Lua没有像C这样的编译步骤.当你说“运行此代码”时,它会开始执行顶部的指令并使其工作.在实践中,Lua首先在执行代码之前将代码编译为字节码,但编译器不会犹豫这样的事情:

greet()

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

因为greet中包含的值是在运行时确定的.只有当你真正尝试调用(即调用函数)greet中的值时,在运行时,Lua才会发现它不包含可调用的值(带有包含__call的元表的函数或表/用户数据)你将得到一个运行时错误:“尝试调用全局’问候'(一个零值)”.其中“零值”是在尝试呼叫时包含的任何值问候.在我们的例子中,它是零.

因此,在尝试调用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()

由于已在_G中声明了问候语,因此main可以访问它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读