cappuccino 发表于 2015-4-21 17:32:14

回复 56# ltblue


这是单个触发器的wait实现啊

cappuccino 发表于 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 http://pkuxkx.com/forum/images/common/back.gif


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()

ltblue 发表于 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 http://pkuxkx.com/forum/images/common/back.gif

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

可否这样
l={}
w="a"
l=w
l()
这样行吗?只要改变w的值?

ltblue 发表于 2015-4-21 17:44:37

回复 61# cappuccino


换句话说,可以同时存在n个协程?只要代码写的”严密“是吗?

ltblue 发表于 2015-4-21 17:46:35

回复ltblue


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


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

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

我的理解,这个会一次次的反复触发wait,而每次wait都会等待直到触发内容的到来,一次触发没等到,下一次触发不会继续,是吗?

cappuccino 发表于 2015-4-21 17:47:15

本帖最后由 cappuccino 于 2015-4-21 05:51 PM 编辑

回复 63# ltblue


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

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

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

相当于执行了loadstring("a()")()

ltblue 发表于 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,是吗?
但你的意识估计不是这样
你觉得会是什么结果呢?

cappuccino 发表于 2015-4-21 17:50:14

回复 67# ltblue


    我“觉得”会是什么结果有用吗?自己运行下试试呗!不要纸上谈兵

cappuccino 发表于 2015-4-21 17:56:35

回复cappuccino


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


    “同时存在”这个词所指太模糊,如果是最宽泛的那种意义的话——当然,你创建100个协程也没人管。但是如果你总是随意地创建协程却忘记让它们寿终正寝的话,那你的机器跑着跑着就会崩溃的。

ltblue 发表于 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()
开头呢?
页: 1 2 3 4 5 6 [7] 8 9 10 11 12
查看完整版本: 我好像误入歧途了