Lua编程之旅:最后的挑战
Lua的冒险还没有结束,我们将面对一些新的挑战。让我们一起去解决它们。
错误11:全局变量的滥用
在Lua宇宙中,全局变量就像宇宙中的无尽之空,它们无处不在,而局部变量则像具体的星球。如果你不小心,可能会无意中创建一个全局变量。
function spaceship:launch()
speed = 1000 -- Oops! This is a global variable
end
要避免这种情况,你应该使用local关键字来声明局部变量。
function spaceship:launch()
local speed = 1000 -- Correct. This is a local variable.
end
错误12:使用 == 比较函数和表
在Lua宇宙中,函数和表就像宇宙中的独一无二的实体,它们是按引用比较的,而不是按值比较。这意味着即使两个函数或表看起来完全一样,但只要它们位于内存中不同的位置,==就会认为它们是不等的。
local function greet()
print("Hello")
end
local anotherGreet = function()
print("Hello")
end
print(greet == anotherGreet) -- prints false, even though the functions do the same thing
这一错误经常会困扰新手,因为他们预期==会比较函数或表的内容,而不仅仅是它们在内存中的位置。
错误13:错误的使用 coroutine.yield
协程是Lua宇宙中的强大工具,但是如果不正确使用,会引发错误。例如,你不能在主线程中调用 coroutine.yield。
coroutine.yield() -- error: attempt to yield from outside a coroutine
正确的使用方式是在协程中调用coroutine.yield。
function myCoroutine()
print("Coroutine started")
coroutine.yield()
print("Coroutine resumed")
end
co = coroutine.create(myCoroutine)
coroutine.resume(co) -- prints "Coroutine started"
coroutine.resume(co) -- prints "Coroutine resumed"
|