存档

  • programming in lua (7)

    第 25 章。

    lua 的一个重要的应用是作为程序配置文件的语言(configuration language)。下面通过一些例子循序渐进地说明其应用。

    一个简单的例子

    假设一个 c 语言程序要画一个窗口界面,窗口的长和宽可以由用户指定。要实现这个功能还有另外更简单的方法,例如使用环境变量或只包含 (key, value) 形式的普通文本文件,但是如果使用普通文本文件你还是需要对其进行解析。程序的配置文件如下:

    -- conf.lua
    -- define window size
    width = 200
    height = 300
    

    下面的程序演示了怎样使用 lua 提供的接口来获得这两个变量的值:

    #include <stdio.h>
    
    #include <lua.h>
    #include <lauxlib.h>
    #include <lualib.h>
    
    int main(void)
    {
        lua_State* 

    阅读全文…

    2012年4月14日 | 归档: lua程序设计 | 标签:
  • programming in lua (6)

    中断了的 lua 学习再次回来了……之前学完基本语法后就不想看接下来的标准库讲解了,因为看了不用基本等于白看,没几天就忘了;但是不看的话连 lua 有什么功能都不知道,更不用说知道把 lua 用在什么地方。最近想学习用 lua 来扩展程序,因此又捡起来了,不过跳过了书中的 part II 和 part III,这里是第 24 章。顺便说一下,这里使用的 lua 版本也从 5.1.4 升到 5.2.0,不过区别应该不大。

    lua 是一个嵌入式语言,就是说它不是一个单独的程序,而是一套可以在其它语言中使用的库,在前面使用过的 lua 交互程序其实是利用 lua 提供的库所实现的一个解析器。lua 可以作为 c 语言的扩展,反过来也可以用 c 语言编写模块来扩展 lua,这两种情况都使用同样的 api 进行交互。lua 与 c 主要是通过一个虚拟的“栈”来交换数据。

    简单的 lua


    阅读全文…

    2012年3月25日 | 归档: lua程序设计 | 标签:
  • programming in lua (5)

    第 8 章。

    虽然我们说 lua 是一种解释语言,但是 lua 在执行前会被预编译为一种中间代码。解释执行语言的特殊之处不在于它们不需要编译执行,而是编译器是语言运行时(runtime)本身的一部分,也就是说可以执行在运行过程中动态产生的代码。

    例如函数 loadstring() 接收一个字符串,返回一个可被执行的语句块(chunk):

    f = loadstring("i = i + 1")
    
    i = 10
    f()
    print(i) -- 11
    

    又或者是省略赋值操作直接使用 loadstring() 的返回值:

    i = 10
    loadstring("i = i + 1")()
    print(i) -- 11
    

    但是直接使用的话如果出错了出错信息会比较模糊。可以使用 …

    阅读全文…

    2011年10月17日 | 归档: lua程序设计 | 标签:
  • programming in lua (4)

    第 7 章。这一章看得不是很明白。

    迭代器可以遍历一个集合中的所有元素。在 lua 中,迭代器一般都是函数,每次调用这个函数都会返回集合中的“下一个”元素,前面提到的闭包函数就是实现迭代器的很好选择:

    function values (t)
       local i = 0
       return function ()
          i = i + 1
          return t[i]
       end
    end
    
    arr = {"one", "two", "three"}
    
    iter = values(arr)
    while true do
       local e = iter()
       

    阅读全文…

    2011年10月9日 | 归档: lua程序设计 | 标签:
  • programming in lua (3)

    5-6 章。

    函数

    函数是完成某一特定功能的语句集合。函数使用括号标识,括号内是传递给函数的参数。如果函数只有一个参数,且这个参数是一个字符串或者 table 的 constructor,那么括号是可选的,例如:

    print("Hello")
    print "hello"
    print (type({x = 10, y = 20}))
    print (type {x = 10, y = 20})
    

    函数定义的语法是:

    function func_name (parameter)
       body
    end
    

    如果括号中的参数多于 1 个用逗号隔开,如果没有参数就不用写。

    给函数传递参数时,如果参数的个数比函数定义的个数少,则靠右的参数被赋值为 nil;如果传递的参数比函数定义的个数多,则多出来的值被忽略:

    function func(a, b, c)
       

    阅读全文…

    2011年9月3日 | 归档: lua程序设计 | 标签:
  • programming in lua (2)

    3-4 章。

    lua 支持的数值运算符有:“+”(加),“-”(减),“*”(乘),“/”(除),“^” (指数),“%”(求余),“-”(取相反数)。“%”还有取特定精度的作用,例如“x%1”表示取 x 的整数部分,而“x%0.01”则取到小数点后两位。

    关系运算符:“<”,“”,“<=”,“=”,“==”,“~=”(不等于)。

    逻辑运算符:“and”,“or”,“not”。

    连接操作符:“..”(将两个字符串连接起来)。

    运算符的优先级从高到低排列,同一行的运算符优先级相同,按出现的位置从左往右结合:

    ^
    not # -(取相反数)
    * / %
    + -
    ..
    < > <= >= ~= ==
    and
    or
    

    实在记不清的话加括号就行了。

    table 的初始化使用“{}”或者在“{}”中包含初始值:

    letters = {"a", "b", "c", "d", 

    阅读全文…

    2011年8月25日 | 归档: lua程序设计 | 标签:
  • programming in lua (1)

    《programming in lua》第二版第 1-2 章。

    运行环境

    这里使用的 lua 版本是 5.1.4,操作系统是 debian 6.0,

    到 lua 的官网下载源码包,因为是 ANSI C 写成的解析器,所以在各个平台上编译都很方便。编译之后会在源码目录里的 src 下生成两个可执行文件:lua 和 luac,其中 lua 用来解析脚本,luac 用来把脚本编译成二进制文件。在源码包里也带有一些例子,在 test 目录下。例如可以用下面的命令来运行 test 下的例子(假设当前目录为解压后的源码根目录):

    ./src/lua test/hello.lua
    

    或者使用 luac 把脚本转换成二进制文件:

    ./src/luac test/hello.lua
    

    默认的输出文件是 luac.out。接着可以使用 lua 来运行这个二进制文件:…

    阅读全文…

    2011年8月13日 | 归档: lua程序设计 | 标签:
文章标签 ‘lua’
  • 当前页 2 / 2
  • «
  • 1
  • 2