我想知道如何使用Lua中另一个脚本的函数。例如,假设GameObjectUtilities
包含许多GameObject
脚本将使用的函数。 Slime
(a GameObject
)脚本想要使用GameObjectUtilities
中的函数。
我无法解决这个问题。我看了here,但我还是不太了解。我是否需要创建一个模块或表来保存GameObjectUtilities
中的函数,以便在其他脚本中使用它中的函数?如果是这样,最好的方法是什么?
这很奇怪。当我以正常方式执行时,它确实有效。问题是,当我运行我的应用程序并尝试使用该脚本时,它不起作用。我不明白。
答案 0 :(得分:12)
不,您不必创建模块。如果你只是像这样创建foo.lua
:
function double(n)
return n * 2
end
然后在您的脚本require 'foo'
中,您将能够访问double
函数,就像在同一脚本中定义的那样。这些函数无法在您的本地获取,但它们是在同一环境中创建的 - 所有module 'name'
都会创建一个新表并将当前环境重置为该表。
所以,你可以这样做:
function slimefunc(...) stuff() end
在GameObjectUtils.lua
中,如果您require 'GameObjectUtils'
,则Slime
可以使用slimefunc
。或者,如果您希望它被命名空间:
utils = {}
function utils.slimefunc(...) stuff() end
它可以utils.slimefunc
访问。 (如果你这样做,你必须非常小心不要让你的名字泄露 - 明智地使用当地人。)
答案 1 :(得分:0)
您没有向我们提供足够的信息。例如,您没有说明是否定义了GameObjectUtilities
或其值是什么。 (我猜它被设置为true
。)
我强烈建议您购买Roberto Ierusalimschy的精湛书籍在Lua中编程的second edition,其中非常简单地解释require
和module
的习惯用法而且很清楚。对于使用Lua来帮助充分利用语言和库的人来说,这本书也是一本很好的书。幸运的是,有一个free sample chapter,目前正涵盖您正在寻找的主题。但无论如何要买这本书;花费25美元: - )
如果您不想购买这本书,可以阅读free sample chapter,还可以阅读how to do things the "old" way, without module(...)
,因为entire previous edition是免费在线的。
一个可能的简短回答是,您的“实用程序”脚本应该创建表并返回。