Ran*_*aul 6 lua arguments coroutine
将参数传递给lua_resume和lua_yield的目的是什么?
据我所知,在第一次调用lua_resume时,参数被传递给正在恢复的lua函数.这是有道理的.但是我希望对lua_resume的所有后续调用都会"更新"协程函数中的参数.然而事实并非如此.
将参数传递给lua_resume以使lua_yield返回的目的是什么?在协程下运行的lua函数是否可以访问lua_resume传递的参数?
Pau*_*nko 10
尼科尔说.如果需要,您仍然可以保留第一次resume调用的值:
do
local firstcall
function willyield(a)
firstcall = a
while a do
print(a, firstcall)
a = coroutine.yield()
end
end
end
local coro = coroutine.create(willyield)
coroutine.resume(coro, 1)
coroutine.resume(coro, 10)
coroutine.resume(coro, 100)
coroutine.resume(coro)
Run Code Online (Sandbox Code Playgroud)
将打印
1 1
10 1
100 1
Run Code Online (Sandbox Code Playgroud)
Lua不能神奇地给出原始论证的新价值.它们甚至可能不再在堆栈中,具体取决于优化.此外,没有迹象表明代码何时产生,因此它可能无法再看到这些参数.例如,如果协程调用了一个函数,那么新函数就无法看到传递给旧函数的参数.
coroutine.yield()返回传递给resume继续协同程序的调用的参数,以便yield调用的站点可以按需要处理参数.它允许执行恢复的代码与执行屈服的特定代码进行通信.yield()将其参数作为返回值传递给resume,resume并将其参数作为返回值传递给yield.这建立了沟通的途径.
你不能以任何其他方式做到这一点.当然不是通过修改可能从yield网站上看不到的参数.它简单,优雅,有道理.
而且,嘲笑某人的价值观被认为是非常粗鲁的.特别是已经在运行的功能.请记住:参数只是填充了值的局部变量.除非用户自己更改这些变量,否则用户不应期望这些变量的内容发生变化.local毕竟,它们是变数.它们只能在当地更换; 由此得名.
| 归档时间: |
|
| 查看次数: |
1459 次 |
| 最近记录: |