Lua

维基百科,自由的百科全书

跳转到: 导航, 搜索
Lua
多重编程范式
发行时间
1993年
設計者
Roberto Ierusalimschy

Waldemar Celes Luiz Henrique de Figueiredo

最新发行时间 5.1.4 (2008年8月22日)
啟發語言
Scheme, SNOBOL, Modula, CLU, C++
影響語言
Io, GameMonkey, Squirrel, Dao, MiniD
跨平台
MIT License
www.lua.org

Lua程序设计语言 是一个简洁、轻量、可扩展的脚本语言。Lua读作/'lua/(噜啊),是葡萄牙语中"Luna"(月亮)的意思。

目录

[编辑] 目标

Lua的目标是成为一个很容易嵌入其它语言中使用的语言。大多数程序员也认为它的确做到了这一点。

很多应用程序使用Lua作为自己的嵌入式脚本语言,以此来实现可配置性、可扩展性。这其中包括大话西游II仙境傳說魔兽世界战锤40k博德之门、轩辕剑外传汉之云等。

[编辑] 特性

Lua是一种轻量语言,它的官方版本只包括一个精简的核心和最基本的库。这使得Lua体积小、启动速度快。它用标准C语言编写并以源代码形式开放,编译后仅仅一百餘K,可以很方便的嵌入别的程式裡。和许多"大而全"的语言不一样,网路通讯、图形界面等都没有預設提供。但是Lua可以很容易地被扩展:由宿主语言(通常是C或C++)提供这些功能,Lua可以使用它们,就像是本来就内置的功能一样。事实上,现在已经有很多成熟的扩展模块可供选用。

Lua是一种多重编程范式的程式设计语言:它只提供了很小的一个特性集合来满足不同编輯范式的需要,而不是为某种特定的编輯范式提供繁杂的特性支援。例如,Lua并不提供继承这个特性,但是你可以用元表来模拟它。诸如名字空间这些概念都没有在语言基本特性中实现,但是我们可以轻易的用表结构(Lua唯一提供的复杂数据结构)轻易模拟。Lua可以在运行时随时构造出一个函数,并把它看作一个对象(正是所谓的first class function),这个特性可以很好的满足函数式编程的需要。这是提供了这些基本的元特性,我们可以任意的对语言进行自需的改造。

Lua原生支援的数据类型非常之少,它只提供了 数字(缺省是双精度浮点数,可配置)、布尔量、字符串、表、子程序、协程(coroutine)以及用户自定义数据这几种。但是其处理表和字符串的效率非常之高,加上元表的支援,我们可以高效的模拟出需要的复杂数据类型(比如集合、数组等)。

Lua是一个动态弱类型语言,支援增量式垃圾收集策略。有内建的,与操作系统无关的协作式多线程(coroutine)支援。

[编辑] 示例代码

print "Hello, world!"

執行後,會在螢幕上顯示"Hello, world!"(不包括前後的")。


一个比较复杂一点的例子,展示了什么是函數,以及Lua对闭包的支持:

function create_a_counter()
    local count = 0
    return function()
        count = count + 1
        return count
    end
end

create_a_counter()會返回一個匿名函數(在Lua中,函數和其他資料一樣,是可以指定給變數來儲存的)。這個匿名函數會把count加1後再回傳。在匿名函數中的變數count既不是全域變數也不是區域變數,而是一種稱為external local variable(外部局部變數,又稱upvalue)的變數。這個變數的值會一直被保存在匿名函數中。因此create_a_counter()的功能就相當於一个记数器,每次调用这个记数器,都会得到一个比上次大1的值。

[编辑] 类型

lua 是动态类型语言,语言中没有类型的定义,也就是写代码时不需要声明变量类型,每个变量自己保存了类型。

有8种基本类型:nil, boolean, number, string, userdata, function, thread, table

    print(type("Hello world"))  --> string
    print(type(10.4*3))         --> number
    print(type(print))          --> function
    print(type(type))           --> function
    print(type(true))           --> boolean
    print(type(nil))            --> nil
    print(type(type(X)))        --> string

可以看到,最后一句代码的输出结果是 string,不管 X 代表什么,结果总是 string ,因为type()函数的返回值是 string 类型

[编辑] 外部链接

官方站点

开发者网站

手册

论坛

工具

  • tolua++ 一个很好的帮助程序员将C/C++代码整合进Lua的工具


Original-Page: Lua - 维基百科,自由的百科全书
 Web-Blaster V2.21 Close Webblaster Floater
The page now displayed was connected to the database of the Assoziations-Blaster (Deutsche Version) through filtering it with the Web-Blaster.

The whole process takes place in real time and no data from other servers is saved anywhere.

In order to see this page without the filter and loaded from its original server, the Webblaster must be turned off.

Turn Off Webblaster