Corona中文站

强大、易学的跨平台(iOS/Android)开发框架。QQ群1:74390406(满) 群2:221929599

导航

Lua中局部变量(local)的意义
本周我们会比平常讲比较多一些关于技术和lua方面的东西,这些东西可能会对你现在的工作有用或者保存下来以便将来备用,但是我肯定,你将来肯定会用上。
通常,lua推荐你在代码块内去本土化(localize)你的局部变量。这对提高性能非常有好处,因为每当你引用一个变量,Lua就可以很快找到变量。本地化变量有助于加快查找,特别是如果你的“本地”变量在同一代码块中被调用。
在我继续讲之前,我会提醒你如何“本土化”的变量(这很简单):

为了让事情看起来更清楚一点,打个比方,想象你的应用程序的全局变量是一个巨大的星系。你引用的变量,它只是这个星系之中的一些行星上,在该星系的某处。
当您本地化一个变量,它必须要让Lua知道在需要用到它时,可以在哪里能够找到它。如果在所有的星系(前面的比方)中一个个去找,是一件很浪费时间的事情。
还没有结束,在最靠近的代码处去申明这个变量,会更好,就像下面这样:

在这个例子中,myTable的地方,还可以这样:

刚刚发生了什么?我们只需要创建另一个局部变量在函数的代码块,它的引用存储到另一个地方的代码块变量外(T)。它可能看起来微不足道,但在实践中的基本概念,可以有一个对您的应用程序作为一个整体产生积极的影响。
《Programming in Lua 》这本书的4.2章节给了我们一些小提示:
A common idiom in Lua is:

local foo = foo

这段代码创建了一个局部变量foo并把它初始化为全局变量foo的值。 (局部变量foo对它之后的代码是可见的)这段代码非常有用,想想看,它可以保持对全局foo原始值得访问,即使后来的代码修改了全局foo的一些功能;而且这种做法也加快了对全局foo的访问。

注意:当上面提到的全局变量,它也可以是一个全局的的局部变量(这是一个本地变量的代码块,又名,upvalue的工作外)。

上面的代码,局部变量t只用于指向myTable,并没有开辟新的内存,并把myTable的数据拷贝一份来,所以对t的属性key1进行修改,其实就是修改了myTable的key1.
但是这种情况只适用于table,其他类型则不同,看下面的例子:

string,number,function等类型,则会开辟内存拷贝值。

原文地址:http://blog.anscamobile.com/2011/07/local-variables-lua/#more-8456

<< Corona开发的APP占据了美国区收费榜前20中的7个位置(有图有真相)lua中实现split函数(代码) >>

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最近发表

Powered By Z-Blog 1.8 Walle Build 100427 Copyright 2011-2015 BuildApp.Net. All Rights Reserved.