北大侠客行MUD论坛

 找回密码
 注册
搜索
热搜: 新手 wiki 升级
楼主: ltblue

还得求助啊,异步果然是大坑......

[复制链接]
 楼主| 发表于 2015-5-29 11:40:59 | 显示全部楼层
回复  ltblue


    这种情况你为啥不用返回值?lua的返回值是一个优势
chatbot 发表于 2015-5-28 10:06 PM



而且这段代码本身,还写不成函数,必须以硬代码的形式出现,不能以函数的形式,然后重复调用。因为涉及return命令,如果放到函数里,函数只能返回上一级函数,我不知道怎么不通过上一级函数,直接返回上两级函数......
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2015-5-29 12:35:33 | 显示全部楼层
我手头有个秋猫的,不过看不懂......还是自己写代码能看懂,从来就看不懂别人的代码......
而且很多 ...
ltblue 发表于 2015-5-29 11:28 AM

看不懂 可以多问 多请教啊。。直接问秋猫 或者其他人
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2015-5-29 12:39:57 | 显示全部楼层
本帖最后由 silvent 于 2015-5-29 12:41 PM 编辑

比如定义一个函数function qu_gold(f,gold,bank,CallBack)
可以设定取钱成功执行f() f可以自己定义
比如local f=function()

l_learn:go()

end
qu_gold(f,100,50,CallBack)
钱庄里没钱执行level_up(CallBack),callback可能某个进程
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2015-5-29 13:10:13 | 显示全部楼层
比如定义一个函数function qu_gold(f,gold,bank,CallBack)
可以设定取钱成功执行f() f可以自己定义
比如 ...
silvent 发表于 2015-5-29 12:39 PM



没看懂,我想想哈
qu_gold的参数里,gold和bank无所谓了,f是一个函数名,换句话说是以一个函数为参数是吧?我函数都这么写
function qu_gold(XX,XX,XX),这么写跟
go_gold=function(XX,XX,XX)是不是等效的?
CallBack你说可能某个进程,进程又如何起名呢?我这里没有“进程”的概念,只有“协程”的概念啊
所以这个CallBack还是不懂......

而且,如果是取钱的事,我为什么要告诉取钱函数,取钱成功后干什么呢?
我的理解哈,取钱函数不应该只干取钱的事,并反馈是否取钱成功吗?取钱后去干什么(比如去学习模块)为什么要当成参数告诉取钱模块呢?没弄懂......

不过,我至少知道,函数名能当参数用了......一些情况下还是很有用的。不过关于这个还有个问题:
function qu_gold(f,gold,bank,CallBack),里边的参数(f),是个形参,也就是说,我改成g也行是吧?只要我调用的时候,参数写成f,那么在qu_gold函数里,g就等于f,g(X)就等于f(X),是吗?
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2015-5-29 13:13:36 | 显示全部楼层
看不懂 可以多问 多请教啊。。直接问秋猫 或者其他人
silvent 发表于 2015-5-29 12:35 PM



没有一个整体的框架,我觉得我看不懂的......很多语句我都不认识
而且,他的貌似是面向对象的,我不太会那个,而且地图是用数据库做的,我也不会
我的地图只是个txt文件,自己写的自己大概都清楚。
我的table里,只有属性,没有方法,换句话说只是数组罢了,所以带方法的东西我就很晕......
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2015-5-30 10:54:34 | 显示全部楼层
回复 44# ltblue


    首先你没理解什么是进程。协程可以理解为线程,而不是进程。而在机器人里面,协成多数只用于wait.make,其他意义不大。而同步的情况,可以考虑使用tell自己。
    另外如果你取钱,需要考虑主函数为什么要取钱的话,那么取钱就不能单独成为一个模块了。主函数只需要考虑,身上有没有钱,如果没,就去取钱,取完回来,主函数再判断是否钱够了就足够了。何必要考虑,是否取成功什么的呢?
    还有就是上面说的返回值的问题,如果你觉得,层级很多,每个函数都要判断返回值,那为什么不设立一个全局的状态变量,底层函数直接修改,然后上层函数直接通过状态做一个swich处理呢?
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2015-5-30 11:40:06 | 显示全部楼层
回复  ltblue


    首先你没理解什么是进程。协程可以理解为线程,而不是进程。而在机器人里面,协成多 ...
chatbot 发表于 2015-5-30 10:54 AM



tell自己?那个需要时间啊,绝大部分情况下,我都在程序内部直接处理,能不设计游戏服务器的尽量不用。同步这件事情本身不难,问题就在于有些时候麻烦,需要到处检测。
我也觉得取钱模块没必要知道为什么去取钱啊,所以我说没懂silvent的意思。
是否取钱成功这事是必须要主函数考虑的,因为存在取钱失败的可能性——比如银行没钱。如果主函数不考虑取钱失败的可能性,就会出现
去取钱——没取钱成功(主函数不知道)——检查钱不够——去取钱——取钱失败(主函数不知道)——检查钱不够——去取钱
这样的死循环。

至于返回值的事,也不是我说的,是“chatbot”在38楼说的,实际上我最初就用的返回值,后来觉得麻烦,改用全局变量,具体见我的16楼
不过全局变量也得检测啊,因为我的底层函数和上层函数都在主协程里,所以底层函数必须判断是否修改了全局变量,才能放下一切,返回上一级,而上一级函数也要检测变量,再返回上一级
所以其实问题没有解决,只是不用返回值,格式书写上略微方便一些了
本来的返回值语法是
o=a()
if o=="break" then
return o

用全局变量的写法是
a()
if o=="break" then
return

就少些两笔......
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2015-5-30 11:48:07 | 显示全部楼层
回复  ltblue


    首先你没理解什么是进程。协程可以理解为线程,而不是进程。而在机器人里面,协成多 ...
chatbot 发表于 2015-5-30 10:54 AM


你说的“进程”是指任务管理器里的那种吗?那个跟mush没啥关系吧?
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2015-5-30 18:30:00 | 显示全部楼层
回复  jarlyyn


耗时问题不是问题
我的问题就是,一直得查状态,每个函数都得查

比如
fun a()
b ...
ltblue 发表于 2015-5-27 06:09 PM


return a()
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2015-5-30 21:51:49 | 显示全部楼层
return a()
cappuccino 发表于 2015-5-30 06:30 PM



return a()
这样不是把a运行了一遍,并把返回值返回给上一级函数吗?
我想要的是“返回”到a,而并不是再运行一遍a啊
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|北大侠客行MUD ( 京ICP备16065414号-1 )

GMT+8, 2024-11-28 01:19 PM , Processed in 0.009909 second(s), 13 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表