6

我玩了大约 2 年的魔兽世界,我对用于编写插件的 Lua 非常好奇。由于到目前为止我所读到的关于 Lua 的内容是“快速”、“轻便”和“这很棒”,我想知道如何以及何时使用它。

您需要在系统中嵌入像 Lua 这样的脚本语言的典型情况是什么?

4

8 回答 8

13

当您需要最终用户能够定义/更改系统而不需要重写系统时。它在游戏中用于允许扩展或允许主游戏引擎保持不变,同时允许更改内容。

于 2009-02-26T17:27:36.633 回答
8

嵌入式脚本语言也适用于存储配置信息。最后我检查了一下,Mozilla 家族都使用 JavaScript 作为他们的配置信息。

接下来,它们非常适合开发插件。您可以创建自定义 API 以向插件开发人员公开,并且插件开发人员可以从使用完整的语言中获得很大的自由。

另一个是平面文件不够表达。如果你想编写行为参数化的数据驱动应用程序,你会厌倦对配置组合进行长串条件测试。发生这种情况时,您最好将规则及其评估写入您的配置。

这个主题在 Pragramtic Programmer 一书中得到了一些报道。

于 2009-02-26T17:32:37.420 回答
3

卢阿是:

  • 轻的
  • 易于集成,即使在游戏等异步环境中
  • 易于学习的非程序员人员,如集成商、设计师和艺术家

由于游戏通常需要所有这些品质,因此 Lua 主要用于那里。其他位置可能是需要一些脚本功能的任何应用程序,但开发人员通常会选择更重量级的解决方案,例如 .Net 或 python。

于 2009-02-26T17:28:04.450 回答
3

除了提到的脚本和可配置性案例,我只想说 Lua+C(或 Lua+C++)是任何软件开发的完美匹配。它允许创建引擎/使用接口,其中引擎在 C/C++ 中完成,行为或定制在 Lua 中完成。

OS X Cocoa 具有 Objective-C(C 和 Smalltalk 的混合物,其中语言按行更改)。我发现 Lua+C 类似,只是源文件改变了语言,这对我来说是一个更好的抽象。

您不想使用 Lua 的原因值得注意。因为它几乎没有一个好的调试器。话又说回来,人们似乎也几乎不需要一个。:)

于 2009-03-08T16:33:00.723 回答
3

如果您必须在应用程序运行时更改代码(立即生效),也可以使用像 Lua 这样的脚本语言。人们可能不会在 wow 中看到这一点,因为据我记得代码是在开始时加载的(并且在运行时没有重新检查和重新加载)。

但是想想另一个例子:网络服务器和脚本语言——(谢天谢地)你可以改变你的 php 代码,而不必重新编译 apache 或重新启动 apache。

steve yegge使用 jython 或 rhino 和 javascript(不记得)为他自己的为wyvern提供动力的 mmorpg 引擎做了这件事。他用java编写了核心引擎,但用python/javascript编写了程序逻辑。

这样做的效果是:

  • 他在更改脚本时不必重新启动核心引擎,因为那样会断开所有玩家的连接
  • 他可以让其他人进行更简单的编程,例如定义新项目和怪物,而无需将所有关键代码暴露给他们
  • 沙盒:如果脚本内部发生错误,您可以优雅地处理它,而不会危及周围的应用程序
于 2009-04-23T06:24:52.967 回答
2

具有实时约束的应用程序的快速开发。电脑游戏就是其中之一;-)

于 2009-02-26T17:26:26.077 回答
2

如果您想允许第三方为您的软件开发插件或模组,这是一个有效的解决方案。

你可以用你使用的任何语言来实现 API,但是像 LUA 这样的脚本语言往往更简单,并且对于临时开发人员来说更容易使用。

于 2009-02-26T17:27:02.020 回答
0

除了其他人提到的所有优秀理由之外,当您需要操作文本、处理文件或只需要更高级别的语言时,在 C 中嵌入 Lua 非常有用。Lua 有很多漂亮的特性(表、函数是一流的值,还有很多其他的好东西)。此外,虽然 lua 不如 C 或 C++ 快,但它对于解释型语言来说相当快。

于 2009-04-21T13:55:13.150 回答