元组模块

lua-users home
wiki

简单的 n 元组实现。包含 NaN 的元组仅与其自身(完全相同的实例)相等。将其保存为 'tuple.lua'。有关用法,请参见 多键索引

--[[

	(...) -> tuple
	wrap(t, [n]) -> tuple

]]

local setmetatable, select, table, tostring =
	  setmetatable, select, table, tostring

setfenv(1, {})

local meta = {__type = 'tuple'}

local function wrap(t, n)
	t.n = n or t.n or #t
	setmetatable(t, meta)
	return t
end

local function new(...)
	return wrap({n=select('#',...),...})
end

function meta:__eq(other)
	if self.n ~= other.n then
		return false
	end
	for i=1,self.n do
		if self[i] ~= other[i] then
			return false
		end
	end
	return true
end

function meta:__tostring()
	local t = {}
	for i=1,self.n do
		t[i] = tostring(self[i])
	end
	return '('..table.concat(t, ', ', 1, self.n)..')'
end

local M = {
	meta = meta,
	wrap = wrap,
	new = new,
}

return setmetatable(M, {__call = function(_,...) return new(...) end})

另请参见

Renato Maia 的类似方法:http://www.tecgraf.puc-rio.br/~maia/lua/tuple/


最近更改 · 偏好设置
编辑 · 历史记录
最后编辑于 2012 年 2 月 28 日下午 8:55 格林威治标准时间 (差异)