我是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中比较常见?
答案 0 :(得分:2)
你问的是错误的问题。这不是“共同”的问题;这是对您和您的应用程序有用的问题。
Lua是一种嵌入式语言,由拥有它的应用程序管理。因此,上述Lua脚本的执行方式完全取决于该应用程序的行为。
在第一种情况下,您有4个不同的地方执行代码。您的应用程序必须在某些时候编译并执行此Lua脚本;这是你的Lua代码第一次被调用。然后,在某些可能的后期点,setup
被调用。
现在,您的应用程序在这两点之间,编译和执行以及对setup
的调用之间会发生什么?或许更好的问题是:您的应用程序在setup
期间提供哪些服务在编译和执行期间不可用?
例如,假设您的应用程序通过Direct3D提供渲染。并且它向Lua脚本公开了将纹理从磁盘加载到D3D的能力。加载并执行脚本后,是否已创建D3D窗口?脚本是否可以控制如何创建窗口,能够设置大小,帧缓冲格式等等?或者这种情况会发生在其他地方吗?
如果在执行脚本时尚未初始化D3D,则脚本无法调用加载纹理的函数。
在这种情况下,您的应用程序会承诺在初始化D3D之后调用setup
,因此在那里放置那种初始化代码是合适的。
但是也许您使用一些外部脚本或配置文件来确定如何设置D3D。因此,当您编译并执行脚本时,所有接口都是有效的。在这种情况下,没有必要将setup
作为简单编译和执行的独特阶段。
但是,您现在必须解决一个奇怪的问题:如果出现编译错误会发生什么?你经历了初始化D3D窗口和一切的麻烦,但脚本甚至无法编译。这可能是一个潜在的大量工作,只是为了解决一个简单的拼写错误或其他语法失败。
所以有一些理由要编译和编译。在设置环境之前执行脚本,只是对它进行一些基本的健全性检查,并确保实际上可以加载脚本及其所依赖的任何模块。这样,你就不会做一大堆工作,只是发现它毫无意义。
如何平衡这些问题最终取决于对自己和您的需求最有用的东西。