我玩了大约 2 年的魔兽世界,我对用于编写插件的 Lua 非常好奇。由于到目前为止我所读到的关于 Lua 的内容是“快速”、“轻便”和“这很棒”,我想知道如何以及何时使用它。
您需要在系统中嵌入像 Lua 这样的脚本语言的典型情况是什么?
当您需要最终用户能够定义/更改系统而不需要重写系统时。它在游戏中用于允许扩展或允许主游戏引擎保持不变,同时允许更改内容。
嵌入式脚本语言也适用于存储配置信息。最后我检查了一下,Mozilla 家族都使用 JavaScript 作为他们的配置信息。
接下来,它们非常适合开发插件。您可以创建自定义 API 以向插件开发人员公开,并且插件开发人员可以从使用完整的语言中获得很大的自由。
另一个是平面文件不够表达。如果你想编写行为参数化的数据驱动应用程序,你会厌倦对配置组合进行长串条件测试。发生这种情况时,您最好将规则及其评估写入您的配置。
这个主题在 Pragramtic Programmer 一书中得到了一些报道。
卢阿是:
由于游戏通常需要所有这些品质,因此 Lua 主要用于那里。其他位置可能是需要一些脚本功能的任何应用程序,但开发人员通常会选择更重量级的解决方案,例如 .Net 或 python。
除了提到的脚本和可配置性案例,我只想说 Lua+C(或 Lua+C++)是任何软件开发的完美匹配。它允许创建引擎/使用接口,其中引擎在 C/C++ 中完成,行为或定制在 Lua 中完成。
OS X Cocoa 具有 Objective-C(C 和 Smalltalk 的混合物,其中语言按行更改)。我发现 Lua+C 类似,只是源文件改变了语言,这对我来说是一个更好的抽象。
您不想使用 Lua 的原因也值得注意。因为它几乎没有一个好的调试器。话又说回来,人们似乎也几乎不需要一个。:)
如果您必须在应用程序运行时更改代码(立即生效),也可以使用像 Lua 这样的脚本语言。人们可能不会在 wow 中看到这一点,因为据我记得代码是在开始时加载的(并且在运行时没有重新检查和重新加载)。
但是想想另一个例子:网络服务器和脚本语言——(谢天谢地)你可以改变你的 php 代码,而不必重新编译 apache 或重新启动 apache。
steve yegge使用 jython 或 rhino 和 javascript(不记得)为他自己的为wyvern提供动力的 mmorpg 引擎做了这件事。他用java编写了核心引擎,但用python/javascript编写了程序逻辑。
这样做的效果是:
具有实时约束的应用程序的快速开发。电脑游戏就是其中之一;-)
如果您想允许第三方为您的软件开发插件或模组,这是一个有效的解决方案。
你可以用你使用的任何语言来实现 API,但是像 LUA 这样的脚本语言往往更简单,并且对于临时开发人员来说更容易使用。
除了其他人提到的所有优秀理由之外,当您需要操作文本、处理文件或只需要更高级别的语言时,在 C 中嵌入 Lua 非常有用。Lua 有很多漂亮的特性(表、函数是一流的值,还有很多其他的好东西)。此外,虽然 lua 不如 C 或 C++ 快,但它对于解释型语言来说相当快。