WEB开发网
开发学院手机开发iPhone 开发 Lua编写iOS程序 阅读

Lua编写iOS程序

 2012-10-08 13:42:08 来源:WEB开发网   
核心提示: 1、为什么要使用Lua?2、苹果允许使用Lua吗?这两个问题是紧密相关的,如果你在此之前对Lua一无所知,Lua编写iOS程序,我会简单介绍一下Lua,如果你熟悉Lua,类似于在函数调用中增加了一个self参数,这在许多语言,则可以跳过这部分内容,关于LuaLua是一个高效、轻量级、嵌入式脚本语言

 1、为什么要使用Lua?

2、苹果允许使用Lua吗?

这两个问题是紧密相关的。

如果你在此之前对Lua一无所知,我会简单介绍一下Lua。如果你熟悉Lua,则可以跳过这部分内容。

关于Lua

Lua是一个高效、轻量级、嵌入式脚本语言。类似Javascrip、Ruby或Python。有许多和我一样的使用者,都认为Lua是一种简洁优雅的语言。

Lua始于1993年巴西里约热内卢宗铎天主教大学的Roberto Ierusalimschy, Waldemar Celes 和Luiz Henrique de Figueiredo。它应用在Mi Casa Verde, Adobe Lightroom, Celestia, lighttpd,LuaTeX, nmap,Wireshark, 思科的Adaptive Security Appliance, pbLua,以及成千上万的游戏中(包括 Grim Fandango(神通鬼大),魔兽世界,Tap Tap Revenge(劲乐团)等)。Lua采用MIT协议——这意味着Lua基本无碍于商业和非商业目的。

Lua的主要数据构建机制是表——可变数组和哈希表的结合。列表1列出了一个Lua Table,假设我们用于描述汽车和它的每加仑行驶里程数。我们可以用字符串类型的键来储存车辆信息,如license和make。而采用数字下标索引的方式存储一系列的每加仑里程数。

列表 1: 一个 Lua Table类型

car_data = { license = 'XVW1942', make = 'Volvo', model = 'XC70',30, 31.3,32.4, 34.0}

print(car_data[1]) -- 30

print(car_data['license']) -- XVW1942

print(car_data.license) -- XVW1942 (also!)

在Lua中,数组下标从1开始,而不是0。'--'表示注释开始直至行末。让你想不到的是,Lua既不是面向对象的语言,也不是函数编程语言。但是,它也提供了几种机制允许你定制自己的高级特性。Lua中内包含了各种不同的对象系统如:传统OO系统和无类化OO系统(比如Oracle的Self语言和Io语言。译者注* 这两种都是基于范型的语言)。Lua支持“first class 函数”(译者注*其实是匿名函数, Lua可以在运行时随时构造出一个函数,并把它看作一个对象),闭包以及元特性(如元表和元方法)。Lua能很好地满足函数式编程的需要。

关于Lua 的面向对象编程的介绍,请阅读《Lua 编程》(这本书很好地介绍了Lua的方方面面)。你也应当阅读Luawiki上的Lua示例。

列表2列出了链表类的一种实现。变量List实际上是table,用作所有链表对象的元表。它实现了一种向后查找表索引的类似于类的事件处理机制。"List.__index=List"一行允许我们为List对象创建方法。方法是保存在List元表中的函数。当我们调用list对象的这些函数时,将在List元表中查找这些函数的定义并运行。

这段代码显示了Lua的一系列增强特性:多赋值(以及函数返回多个返回值),方法调用语法糖(':' 符号的作用,类似于在函数调用中增加了一个self参数,这在许多语言,从Python到OC都能见到)。

列表 2: Linked List 类

List = {}

List.__index = List

function List:new()

local l = { head = {},tail = {}, size = 0 }

l.head.__next,l.tail.__prev = l.tail, l.head

return setmetatable(l,self)

end

function List:first()

if self.size > 0 then

returnself.head.next

else

return nil

end

end

function List:addFirst(elem)

local node = { prev= self.head, value = elem,

next = self.head.next }

node.next.prev =node

self.head.next =node

self.size =self.size + 1

end

mylist = List:new()

mylist:addFirst(12)

print(mylist:first())

1 2 3 4 5 6  下一页

Tags:Lua 编写 iOS

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接