协程resume()传入的参数

协程resume()传入的参数依据yield()的左值来决定,例如:

#!/usr/bin/lua

function foo(a)

    print("foo function", a)

    return coroutine.yield(2 * a)

end


co = coroutine.create(function(a, b)

    print("第一次协同执行输出: ", a, b)

    local r = foo(a + 1)  --这里resume需要传入至少一个参数


    print("第二个协同扫行办出: ", r)

    local r, s = coroutine.yield(a + b, a - b)--这里resume需要传入至少两个参数


    print("第三个协执行输出: ", r, s)

    return b, "结束协同程序"

end)


print("main", coroutine.resume(co, 1, 10))

print("--分割线----")

print("main", coroutine.resume(co, 'r'))

print("--分割线----")

print("main", coroutine.resume(co, 'x', 'y'))

print("--分割线----")

print("main", coroutine.resume(co, "x", "y"))

print("--分割线----")

运行结果:

第一次协同执行输出: 1 10

foo function 2

main true 4

--分割线----

第二个协同扫行办出: r

main true 11 -9

--分割线----

第三个协执行输出: x y

main true 10 结束协同程序

--分割线----

main false cannot resume dead coroutine

--分割线----



你可能感兴趣的:(lua)