Lua - 如何使用其他脚本中的函数

时间:2010-03-19 01:34:21

标签: lua

我想知道如何使用Lua中另一个脚本的函数。例如,假设GameObjectUtilities包含许多GameObject脚本将使用的函数。 Slime(a GameObject)脚本想要使用GameObjectUtilities中的函数。

我无法解决这个问题。我看了here,但我还是不太了解。我是否需要创建一个模块或表来保存GameObjectUtilities中的函数,以便在其他脚本中使用它中的函数?如果是这样,最好的方法是什么?

这很奇怪。当我以正常方式执行时,它确实有效。问题是,当我运行我的应用程序并尝试使用该脚本时,它不起作用。我不明白。

2 个答案:

答案 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,其中非常简单地解释requiremodule的习惯用法而且很清楚。对于使用Lua来帮助充分利用语言和库的人来说,这本书也是一本很好的书。幸运的是,有一个free sample chapter,目前正涵盖您正在寻找的主题。但无论如何要买这本书;花费25美元: - )

如果您不想购买这本书,可以阅读free sample chapter,还可以阅读how to do things the "old" way, without module(...),因为entire previous edition是免费在线的。

一个可能的简短回答是,您的“实用程序”脚本应该创建表返回