在Lua中做功能以外的初始工作是一种好习惯吗?

时间:2018-06-16 13:10:02

标签: lua

我是Lua的初学者。

目前,我将Lua环境设计为如下所示。

function setup() --called in the beginning
    --do something
end

function draw() --called every frame
    --do something
end

function exit() --called on exit
    --do something
end

我想知道在以下函数之外进行初始工作是否更好。

--do something in the beginning

function draw() --called every frame
    --do something
end

function exit() --called on exit
    --do something
end

虽然第二种设计更简单,更快速,但我想知道在函数之外编写初始内容是否是一种好习惯。

两种设计有什么区别吗?哪一个在Lua中比较常见?

1 个答案:

答案 0 :(得分:2)

你问的是错误的问题。这不是“共同”的问题;这是对您和您的应用程序有用的问题。

Lua是一种嵌入式语言,由拥有它的应用程序管理。因此,上述Lua脚本的执行方式完全取决于该应用程序的行为。

在第一种情况下,您有4个不同的地方执行代码。您的应用程序必须在某些时候编译并执行此Lua脚本;这是你的Lua代码第一次被调用。然后,在某些可能的后期点,setup被调用。

现在,您的应用程序在这两点之间,编译和执行以及对setup的调用之间会发生什么?或许更好的问题是:您的应用程序在setup期间提供哪些服务在编译和执行期间不可用?

例如,假设您的应用程序通过Direct3D提供渲染。并且它向Lua脚本公开了将纹理从磁盘加载到D3D的能力。加载并执行脚本后,是否已创建D3D窗口?脚本是否可以控制如何创建窗口,能够设置大小,帧缓冲格式等等?或者这种情况会发生在其他地方吗?

如果在执行脚本时尚未初始化D3D,则脚本无法调用加载纹理的函数。

在这种情况下,您的应用程序会承诺在初始化D3D之后调用setup,因此在那里放置那种初始化代码是合适的。

但是也许您使用一些外部脚本或配置文件来确定如何设置D3D。因此,当您编译并执行脚本时,所有接口都是有效的。在这种情况下,没有必要将setup作为简单编译和执行的独特阶段。

但是,您现在必须解决一个奇怪的问题:如果出现编译错误会发生什么?你经历了初始化D3D窗口和一切的麻烦,但脚本甚至无法编译。这可能是一个潜在的大量工作,只是为了解决一个简单的拼写错误或其他语法失败。

所以有一些理由要编译和编译。在设置环境之前执行脚本,只是对它进行一些基本的健全性检查,并确保实际上可以加载脚本及其所依赖的任何模块。这样,你就不会做一大堆工作,只是发现它毫无意义。

如何平衡这些问题最终取决于对自己和您的需求最有用的东西。