小编pro*_*ver的帖子

放弃协同程序

在Lua 5.1中,从不让协程正常结束有多糟糕?换句话说,如果一个协程收益但是我从来没有恢复它,它是否会在程序完成之前留下很多州?

cor=coroutine.wrap(somefunc)

while true do
   done=cor()
   if done then -- coroutine exited with "return true" 
       break
   else -- coroutine yielded with "coroutine.yield(false)"
       if some_condition then break end
   end
end

function somefunc()
    -- do something
    coroutine.yield(false)
    -- do some more
    return true
end 
Run Code Online (Sandbox Code Playgroud)

根据上面伪代码中的some_condition,协程可能永远不会被恢复,因此可能永远不会正确地"结束".

我可以这样做几十个协同程序而不必担心吗?将协同程序置于此状态是否安全?这个很贵吗?

lua coroutine

8
推荐指数
1
解决办法
3048
查看次数

什么会让Lua更容易合作?

我喜欢Lua,将它用作越来越多的项目作为主要(非嵌入式)语言.我目前的项目接近10,000行,可能会以约15,000行结束.在Lua中以这种规模进行开发时,您发现了什么有用的东西?你有什么打击你的头,你找到了什么解决方案?我正在考虑开发工具,语言功能和技术,第三方模块?

我的前三名:

  1. strict.lua - 我使用了这个的修改版本.没有被提醒访问未使用/非预期的变量我会发疯.

  2. 协程 - 不是因为它们的多线程能力,而是因为它们的可持续性.对于简化状态机的实现非常有用.

  3. 序列化函数 - 对于转储表内容和将表持久化到磁盘是必不可少的(除非我可能已经到达数据库,否则我会多次使用它).

我的收藏:

  1. OS X的可视调试器.我现在正在使用print(),但是让我单步执行源文件的调试器会很棒.

  2. 一个继续声明.使用重复...直到真正的解决方法是丑陋的,并且太多嵌套ifs变得复杂和丑陋.

  3. 修改现有表成员时调用的元方法.

大规模Lua开发的其他任何提示?

lua

8
推荐指数
1
解决办法
1014
查看次数

改进Lua错误消息

每当Lua脚本中发生错误时,除了通常的堆栈跟踪之外,我希望它将所有本地和全局变量的值写入屏幕/可选地写入文件.

我如何才能将此作为所有错误的默认行为?

debugging lua

5
推荐指数
1
解决办法
2999
查看次数

函数能否知道它是否在协程内运行?

有没有办法让函数知道它是否在协程中运行?

例如,我有一个send_message()函数,它尝试三次发送消息.在每次尝试之间需要等待一秒钟.如果从协程中调用此函数,我希望send_message()函数执行coroutine.yield()作为其wait-1秒循环的一部分.但如果它不在协程中,那么它应该做一个POSIX usleep().

有没有办法做到这一点?

lua

4
推荐指数
1
解决办法
1566
查看次数

使用Ctrl-W_W在VIM中跳过窗口

当我在VIM中打开几个窗口时,每当我按下Ctrl-W_W时,我总是会跳过其中一个窗口(包含我的项目使用Aric Blumer的Project插件).

换句话说,我想在我的文档窗口中循环,好像Project窗口不是其中之一.当我确实想要进入项目窗口时,我将使用我为此专门创建的映射.

有没有办法标记一个窗口,以便它被Ctrl-W_W跳过或者我需要一个脚本?我喜欢Vim,但仍处于学习曲线的陡峭部分.

vim macvim

3
推荐指数
1
解决办法
196
查看次数

标签 统计

lua ×4

coroutine ×1

debugging ×1

macvim ×1

vim ×1