Archive for 一月 2013

Lua检查函数的覆盖问题

Lua里面可以实现类面向对象,这个在后面会分析到。前几天项目里面遇到的一个问题,在不同模块中的同名函数,由于都是挂在某个类下面,会出现后面加载的模块函数覆盖了前面的函数。简单的例子就是这样的:

首先定义一个基类obj,里面有一个名为test的函数:

module("obj", package.seeall)

function test()
  print("in

Lua5.1.4代码分析(十七)-可变参数函数的实现

可变函数参数的实现相对简单。

首先来看看Lua中可变参数函数的使用方式。如果函数传入的参数是”…”,则表示这里的参数是可变参数,在使用时,它们最终会存储到一个名为arg的数组中。

如前面对函数的解析里面提到,在对一个函数的参数进行解析时,会走到parlist函数中,这里处理了变参参数的情况:

static void parlist (LexState *ls) {
  /* parlist -> [ param { `,' param } ] */
  FuncState *fs = ls->fs;
  Proto *f = fs->f;
 

Lua5.1.4代码分析(十六)-函数与Upvalue

Lua中的所谓upvalue是一类比较特殊的值,可以理解为在某函数内引用外部的数据。所以这里就涉及到垃圾回收相关的话题,比如函数A使用它的upvalue a,那么就需要保证a在函数A调用之前不会被Lua gc自动回收。里面还有一些其他细节。下面一一道来。

在前面提到的