北大侠客行MUD论坛

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

我好像误入歧途了

[复制链接]
发表于 2015-4-21 17:32:14 | 显示全部楼层
回复 56# ltblue


这是单个触发器的wait实现啊
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2015-4-21 17:35:45 | 显示全部楼层
本帖最后由 cappuccino 于 2015-4-21 05:37 PM 编辑
另外,请教一个语法问题:

有函数a,函数b,函数c,以及变量w
我希望当w=="a"时,运行函数a
w=="b"时, ...
ltblue 发表于 2015-4-21 05:04 PM



a = function()
  print("a")
end
b = function()
  print("b")
end
c = function()
  print("c")
end
l = {
  ["a"] = a, ["b"] = b, ["c"] = c
}

w = "a"
l[w]()
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2015-4-21 17:43:39 | 显示全部楼层
a = function()
  print("a")
end
b = function()
  print("b")
end
c = function()
  print( ...
cappuccino 发表于 2015-4-21 05:35 PM


原来万能的table还能这么用啊
但是如果把
l={
  ["a"]=a,
}
这部分也想办法省略或者简写呢?

可否这样
l={}
w="a"
l[w]=w
l[w]()
这样行吗?只要改变w的值?
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2015-4-21 17:44:37 | 显示全部楼层
回复 61# cappuccino


换句话说,可以同时存在n个协程?只要代码写的”严密“是吗?
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2015-4-21 17:46:35 | 显示全部楼层
回复  ltblue


    可以多个模块一起wait.regexp,你多wait.make几次就是了。不过不是很推荐动不动就创 ...
cappuccino 发表于 2015-4-21 04:46 PM



    你的代码我一个都没懂......

wait.make(function()
  while true do
    local l, w = wait.regexp("触发内容")
    触发动作
  end
end)

我的理解,这个会一次次的反复触发wait,而每次wait都会等待直到触发内容的到来,一次触发没等到,下一次触发不会继续,是吗?
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2015-4-21 17:47:15 | 显示全部楼层
本帖最后由 cappuccino 于 2015-4-21 05:51 PM 编辑

回复 63# ltblue


    不行,你相当于执行了"a"(),lua不认。非要那样的话,方法(之一?)是:

w = "a"
loadstring(w .. "()")()

前提是字符串w的值就是函数名

相当于执行了loadstring("a()")()
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2015-4-21 17:47:40 | 显示全部楼层
回复 60# cappuccino


for i = 1, 10 do
  wait.make(function ()
    while true do
      print(i)
      wait.time(1)
    end
  end)
end

我这个的理解,程序应该是不停的,每隔一秒输出一个1,是吗?
但你的意识估计不是这样
你觉得会是什么结果呢?
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2015-4-21 17:50:14 | 显示全部楼层
回复 67# ltblue


    我“觉得”会是什么结果有用吗?自己运行下试试呗!不要纸上谈兵
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2015-4-21 17:56:35 | 显示全部楼层
回复  cappuccino


换句话说,可以同时存在n个协程?只要代码写的”严密“是吗?
ltblue 发表于 2015-4-21 05:44 PM



    “同时存在”这个词所指太模糊,如果是最宽泛的那种意义的话——当然,你创建100个协程也没人管。但是如果你总是随意地创建协程却忘记让它们寿终正寝的话,那你的机器跑着跑着就会崩溃的。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2015-4-21 17:57:24 | 显示全部楼层
回复 68# cappuccino


运行的结果是,先输出了1-10,然后每秒输出1-10,虽然顺序不一定
这么说是10个协程同时运行了
可是为什么呢?

我按照论坛某个帖子的说法,几乎所有的调用,只要可能涉及到协程的,都是这么写的

co = coroutine.create(function()
autodraw("%1")
end)
coroutine.resume(co)

而在lua文件里,根本没有wait.make命令
我写代码也都是

function text(a)
开头,而不是以
wait.make(function()
开头,
话说,这样的函数是匿名的吗?如果不匿名是不是应该是
wait.make(text=function()
开头呢?
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-15 05:48 AM , Processed in 0.011843 second(s), 13 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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