2021-12-18 · 学动漫、设计、电竞、电商、短视频、软件等
1.1 这个函数等价于调用 lu a_yieldk, 不同的是不提供延续函数(参见。 因此,当线程被延续,线程会继续运行调用 l ua_yield 函数的函数。
让出协程(线程)。
1.2 当 C 函数调用了 lu a_yieldk, 当前运行的协程会挂起, 启动这个线程的 l ua_resume 调用返回。 参数 nresults 指栈上需返回给 l ua_resume 的返回值的个数。
当协程再次被延续时, L ua 调用延续函数 k 继续运行被挂起(参见)的 C 函数。 延续函数会从前一个函数中接收到相同的栈, 栈中的 n 个返回值被移除而压入了从 lu a_resume 传入的参数。 此外,延续函数还会收到传给 lu a_yieldk 的参数 ctx。
1.3 通常,这个函数不会返回; 当协程一次次延续,将从延续函数继续运行。 然而,有一个例外: 当这个函数从一个逐行运行的钩子函数(参见) 中调用时,lu a_yieldk 不可以提供延续函数。 (也就是类似 l ua_yield 的形式), 而此时,钩子函数在调用完让出后将立刻返回。 L ua 会使协程让出,一旦协程再次被延续, 触发钩子的函数会继续正常运行。
1.4 当一个线程处于未提供延续函数的 C 调用中,调用它会抛出一个错误。 从并非用延续方式(例如:主线程)启动的线程中调用它也会这样。
l ua_getinfo
int lua_getinfo (lua_State *L, const char *what, lua_Debug *ar);
返回一个指定的函数或函数调用的信息。
1.5 当用于取得一次函数调用的信息时, 参数 ar 必须是一个有效的活动的记录。 这条记录可以是前一次调用 lu a_getstack 得到的, 或是一个钩子 (参见 )得到的参数。
用于获取一个函数的信息时, 可以把这个函数压入堆栈, 然后把 what 字符串以字符 '>' 起头。 (这会让 l ua_getinfo 从栈顶上弹出函数。) 例如,想知道函数 f 是在哪一行定义的, 你可以使用下列代码:
lu a_getlocal
const char *lu a_getlocal (lua_State *L, const lua_Debug *ar, int n);
1.6 从给定活动记录或从一个函数中获取一个局部变量的信息。
对于第一种情况, 参数 ar 必须是一个有效的活动的记录。 这条记录可以是前一次调用 lua_getstack 得到的, 或是一个钩子 (参见)的参数。 索引 n 用于选择要检阅哪个局部变量; 参见 debug.getlocal 中关于变量的索引和名字的介绍。
lu a_getlocal 将变量的值压栈,并返回其名字。
1.7 对于第二种情况,ar 必须填 NULL 。 需要探知的函数必须放在栈顶。 对于这种情况,只有 Lua 函数的形参是可见的 (没有关于还有哪些活动变量的信息) 也不会有任何值压栈。
当索引大于活动的局部变量的数量, 返回 NULL (无任何压栈)
lu a_getstack
int lu a_getstack (lua_State *L, int level, lua_Debug *ar);
获取解释器的运行时栈的信息。
1.8 这个函数用正在运行中的指定层次处函数的 活动记录 来填写 lu a_Debug 结构的一部分。 0 层表示当前运行的函数, n+1 层的函数就是调用第 n 层 (尾调用例外,它不算在栈层次中) 函数的那一个。 如果没有错误, lua_getstack 返回 1 ; 当调用传入的层次大于堆栈深度的时候,返回 0 。
供参考。
2021-12-18
一般来说理科生的大学生有一门必修课是编程,而想要从事软件开发的人员,没有C语言基础是不行的。而C语言中比较重要的部分就是函数。
函数是实现各种软件开发功能的途径,如果你对函数了如指掌,那么软件开发将是一件很简单的事情了。
今天这次课程我们从基础的函数讲起,教你轻松入门C语言。
算法是什么?
什么是算法,这个就有点像我们学习数学的时候的计算了。
比如你在排列组合中需要计算5!,但是,你并不知道这个5!是什么意思和含义,那么你将计算不出来。
而如果我告诉你5!表示5的阶乘,其计算方法就是从5开始一直乘到1就是最后的计算结果,那么你就能计算出来5!了。
而我告诉你的这个计算方法和过程就是计算机中的算法!
相信讲到这里,你应该对算法有个具体的了解了吧!
代码是什么?
代码就是输入计算机中计算机可识别的语言,然后产生可执行的语言的中间产物。
如上面我们需要计算5!,根据上面我们讲到的计算阶乘的算法,你可以给计算机输入以下语句:
int iRst=5*4*3*2*1;
printf("5的阶乘计算结果为:%d\n",iRst);
这两行在计算机编程语言中就称为可执行的代码。
函数和算法之间什么联系?
上面我们讲述了算法和代码,那么函数到底是什么?函数和算法之间有什么联系?我们来继续进行详解!
从上面的代码,我们能够看出,如果想要实现相关的功能,必须要知道相关的算法流程,这样才能得到最终的计算结果。
计算机不是人,他是靠人执行的,你想让计算机帮你执行什么代码,必须要清晰的告诉计算机,这样才能得到你想要的结果。
那么函数是什么?
函数就是将算法和相关的代码结合起来,再起个名称,就是最后的函数了。
也就是说,函数是具体的实现某个算法的过程。
如上面的求阶乘的算法,我们完全可以根据其相关的算法,写出一个函数:
int fun(int num)
{
int iRst=0;
if(num==0)
{
iRst=1;//(表示0!=1)
return iRst;
}
for (int i = num; i >1; i--){iRst =iRst* i;}
return iRst;
}
将任何一个int类型的数值传入,都能计算出起相关的阶乘,这就是这个函数int fun(int num)实现的功能了!
具体这些代码是什么含义,我们下次课再对C语言中的关键字进行讲解吧!
本次课程到此结束,下次课再见!如您有相关问题,请下方留言。欢迎跟我们一起学习!
声明:本文为尖子生数理化教育的原创文章,未经作者同意不得进行相关的转载和复制,翻版必究!请务必尊重他人的劳动成果!