point有没有复数Lua的复数库

Lua使用静态库 - CSDN博客
Lua使用静态库
本文以移到到
可获得更好的阅读效果
最近想给自己的小软件添加一些个性化的东西,也就是支持”“。因为在之前有写过的经验,所以首选,可是无奈会跟一个Dll这个着实让人蛋疼,我的小程序总共就一个.文件,让我在后面加一个.文件真的一万个不愿意。在这期间我尝试了很多的”“没有一个中意的,其中包括”“,它们差不多都要跟随一个。因为在之前写的时候,听说过关于静态库这一说,一直都没有尝试过,今天花了一上午的时间终于给折腾出来了。不敢独享。下面是正文!
参加我的文章:&
下载好你对应编译器的静态库之后就可以开始写代码了,因为的使用的VS2010所以我下载的为:,其文件格式如下:
& & lauxlib.h
& & lua.hpp
& & luaconf.h
& & lualib.h
首选让你的工程包含这几个头文件和一个连接库。具体设置如下:
如同之前的文章所写,只是更改部分代码:
#include &stdafx.h&
#include &process.h&
extern &C& {
#include &lua.h&
#include &lauxlib.h&
#include &lualib.h&
// 此处连接为:lua52.lib,以前的为 #pragma comment(lib,&lua5.1.lib&)
#pragma comment(lib,&lua52.lib&)
int _tmain(int argc, _TCHAR* argv[])
// 打开换为 luaL_newstate
lua_State *L = luaL_newstate() ; /* 打开 Lua */
luaL_openlibs(L); /* 加载 .lib 文件 */
// 加载脚本文件,需要放在程序目录
luaL_loadfile( L, &test.lua& );
lua_resume( L, 0 , 0);
// 调用【ShowIm】函数
lua_getglobal( L, &ShowIm& );
if( lua_resume( L, 0, 0 ) )
printf( &%s/n&, lua_tostring( L, 1 ) );
// 调用结束
lua_close(L);
system(&pause&);
虚拟机,无lua环境
本文已收录于以下专栏:
相关文章推荐
1、下载Lua源码http://www.lua.org/ftp/lua-5.3.3.tar.gz
a 下载后解压到一个目录下,这里假设解压到文件夹 注意下载的版本
2、在VS2015中...
编写自己的C函数,编译链接成动态链接库 , 供lua使用
static int ding_s...
首先贴上代码:
** Standard library header.
** Copyright (C)
Mike Pall. See Copyright Notice i...
1.下载lua源码
2.在VS2013中新建一个静态库项目,项目命名为lua
  a. 选择新建 Win32 console project
  b. 在wizard界面选择 static ...
新建DLL空的win32工程,新建test.cpp文件,内容如下
/*Lua调用C/C++函数/库(动态链接方式)*/
dll通过函数luaL_openlib导出,然后lua使用package.loadlib导入库函数,基本就是这么个过程,下面上代码来说明一切。
// libforlua.cpp : 定义 DLL ...
背景及需求
lua作为一门发展成熟的脚本语言,正在变得越来越流行。它也可以作为和C/C++执行脚本交互的语言。并且Lua的整个库很小,当Lua自身带有的部分库无法满足我们自身需要实现的功能时,我们就需...
lua静态库的使用问题
虽然上年暑假的时候,我看完了《lua程序设计》,那时候主要是把主要概念背熟,还有把几个面试要问的问题弄明白了,但实际上却很少写代码,写的lua代码可能都不超过1000行,哎,怪不得,才半年多,几乎所有...
他的最新文章
讲师:董岩
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)lua&math库
atan2、sinh、cosh、tanh这4个应该用不到。
math.abs(-2012)
math.ceil(9.1)
math.floor(9.9)
取参数最大值
math.max(2,4,6,8)
取参数最小值
math.min(2,4,6,8)
计算x的y次幂
math.pow(2,16)
math.sqrt(65536)
math.mod(65535,2)
取整数和小数部分
math.modf(20.12)
randomseed
设随机数种子
math.randomseed(os.time())
math.random(5,90)
角度转弧度
math.rad(180)
弧度转角度
math.deg(math.pi)
math.exp(4)
计算x的自然对数
math.log(54.)
计算10为底,x的对数
math.log10(1000)
将参数拆成x * (2 ^ y)的形式
math.frexp(160)
0.625&&& 8
math.ldexp(0.625,8)
math.sin(math.rad(30))
math.cos(math.rad(60))
math.tan(math.rad(45))
math.deg(math.asin(0.5))
math.deg(math.acos(0.5))
math.deg(math.atan(1))
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。基本函数库为Lua内置的函数库,不需要额外装载assert (v [, message])功能:相当于C的断言,参数:v:当表达式v为nil或false将触发错误,message:发生错误时返回的信息,默认为"assertion failed!"--------------------------------------------------------------------------------collectgarbage (opt [, arg])功能:是垃圾收集器的通用接口,用于操作垃圾收集器参数:opt:操作方法标志"Stop": 停止垃圾收集器&"Restart": 重启垃圾收集器&"Collect": 执行一次全垃圾收集循环"Count": 返回当前Lua中使用的内存量(以KB为单位)"Step": 单步执行一个垃圾收集. 步长 "Size" 由参数arg指定 (大型的值需要多步才能完成),如果要准确指定步长,需要多次实验以达最优效果。如果步长完成一次收集循环,将返回True"Setpause": 设置 arg/100 的值作为暂定收集的时长&"Setstepmul": 设置 arg/100 的值,作为步长的增幅(即新步长=旧步长*arg/100)--------------------------------------------------------------------------------dofile (filename)功能:打开并且执行一个lua块,当忽略参数filename时,将执行标准输入设备(stdin)的内容。返回所有块的返回值。当发生错误时,dofile将错误反射给调用者注:dofile不能在保护模式下运行--------------------------------------------------------------------------------error (message [, level])功能:终止正在执行的函数,并返回message的内容作为错误信息(error函数永远都不会返回)通常情况下,error会附加一些错误位置的信息到message头部.Level参数指示获得错误的位置,Level=1[默认]:为调用error位置(文件+行号)Level=2:指出哪个调用error的函数的函数Level=0:不添加错误位置信息--------------------------------------------------------------------------------_G全局环境表(全局变量)功能:记录全局环境的变量值的表 _G._G = _G--------------------------------------------------------------------------------getfenv(f)功能:返回函数f的当前环境表参数:f可以为函数或调用栈的级别,级别1[默认]为当前的函数,级别0或其它值将返回全局环境_G--------------------------------------------------------------------------------getmetatable(object)功能:返回指定对象的元表(若object的元表.__metatable项有值,则返回object的元表.__metatable的值),当object没有元表时将返回nil--------------------------------------------------------------------------------ipairs (t)功能:返回三个值 迭代函数、表、0多用于穷举表的键名和键值对如:for i,v in ipairs(t) do&end每次循环将索引赋级i,键值赋给v注:本函数只能用于以数字索引访问的表 如:t={"1","cash"}--------------------------------------------------------------------------------load (func [, chunkname])功能:装载一个块中的函数,每次调用func将返回一个连接前一结的字串,在块结尾处将返回nil当没有发生错误时,将返回一个编译完成的块作为函数,否则返回nil加上错误信息,此函数的环境为全局环境chunkname用于错误和调试信息--------------------------------------------------------------------------------loadfile ([filename])功能:与load类似,但装载的是文件或当没有指定filename时装载标准输入(stdin)的内容--------------------------------------------------------------------------------loadstring (string [, chunkname])功能:与load类似,但装载的内容是一个字串如:assert(loadstring(s))()--------------------------------------------------------------------------------next (table [, index])功能:允许程序遍历表中的每一个字段,返回下一索引和该索引的值。参数:table:要遍历的表   index:要返回的索引的前一索中的号,当index为nil[]时,将返回第一个索引的值,当索引号为最后一个索引或表为空时将返回nil注:可以用next(t)来检测表是否为空(此函数只能用于以数字索引的表与ipairs相类似)--------------------------------------------------------------------------------ipairs (t)功能:返回三个值 next函数、表、0多用于穷举表的键名和键值对如:for n,v in pairs(t) do&end每次循环将索引赋级i,键值赋给v注:本函数只能用于以键名索引访问的表 如:t={id="1",name="cash"}--------------------------------------------------------------------------------pcall (f, arg1, &&&)功能:在保护模式下调用函数(即发生的错误将不会反射给调用者)当调用函数成功能返回true,失败时将返回false加错误信息--------------------------------------------------------------------------------print (&&&)功能:简单的以tostring方式格式化输出参数的内容--------------------------------------------------------------------------------rawequal (v1, v2)功能:检测v1是否等于v2,此函数不会调用任何元表的方法--------------------------------------------------------------------------------rawget (table, index)功能:获取表中指定索引的值,此函数不会调用任何元表的方法,成功返回相应的值,当索引不存在时返回nil注:本函数只能用于以数字索引访问的表 如:t={"1","cash"}--------------------------------------------------------------------------------rawset (table, index, value)功能:设置表中指定索引的值,此函数不会调用任何元表的方法,此函数将返回table--------------------------------------------------------------------------------select (index, &&&)功能:当index为数字将返回所有index大于index的参数:如:select(2,"a","b") 返回 "b"当index为"#",则返回参数的总个数(不包括index)--------------------------------------------------------------------------------setfenv (f, table)功能:设置函数f的环境表为table参数:f可以为函数或调用栈的级别,级别1[默认]为当前的函数,级别0将设置当前线程的环境表--------------------------------------------------------------------------------setmetatable (table, metatable)功能:为指定的table设置元表metatable,如果metatable为nil则取消table的元表,当metatable有__metatable字段时,将触发错误注:只能为LUA_TTABLE 表类型指定元表--------------------------------------------------------------------------------tonumber (e [, base])功能:尝试将参数e转换为数字,当不能转换时返回nilbase(2~36)指出参数e当前使用的进制,默认为10进制,如tonumber(11,2)=3--------------------------------------------------------------------------------tostirng(e)功能:将参数e转换为字符串,此函数将会触发元表的__tostring事件--------------------------------------------------------------------------------type(v)功能:返回参数的类型名("nil","number", "string", "boolean", "table", "function", "thread", "userdata")--------------------------------------------------------------------------------unpack (list [, i [, j]])功能:返回指定表的索引的值,i为起始索引,j为结束索引注:本函数只能用于以数字索引访问的表,否则只会返回nil 如:t={"1","cash"}--------------------------------------------------------------------------------_VERSION功能:返回当前Lua的版本号"Lua 5.1".&--------------------------------------------------------------------------------xpcall (f, err)功能:与pcall类似,在保护模式下调用函数(即发生的错误将不会反射给调用者)但可指定一个新的错误处理函数句柄当调用函数成功能返回true,失败时将返回false加err返回的结果
阅读(...) 评论()在 SegmentFault,解决技术问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。
一线的工程师、著名开源项目的作者们,都在这里:
获取验证码
已有账号?
标签:至少1个,最多5个
基础库为 Lua 提供了一些核心函数。如果没有包含这个库,那么就可能需要自己来实现一些 Lua 语言特性了。
assert (v [, message])
如果其参数 v 的值为假(nil 或 false), 它就调用 error; 否则,返回所有的参数。 在错误情况时, message
指那个错误对象; 如果不提供这个参数,参数默认为 "assertion failed!" 。
assert(5==4,"Number Not Equal!")
--& 报错 Number Not Equal!
assert(nil)
--& 报错 assertion failed!
collectgarbage (opt [, arg])
控制垃圾回收器的参数有两个,pause 和 step multipier。
参数 pause 控制了收集器在开始一个新的收集周期之前要等待多久。 随着数字的增大就导致收集器工作工作的不那么主动。 小于 1 的值意味着收集器在新的周期开始时不再等待。 当值为 2 的时候意味着在总使用内存数量达到原来的两倍时再开启新的周期。
参数 step multiplier 控制了收集器相对内存分配的速度。 更大的数字将导致收集器工作的更主动的同时,也使每步收集的尺寸增加。 小于 1 的值会使收集器工作的非常慢,可能导致收集器永远都结束不了当前周期。 缺省值为 2 ,这意味着收集器将以内存分配器的两倍速运行。
该函数是垃圾回收器的通用接口,根据 opt 参数的不同实现不同的功能。
"stop": 停止垃圾回收。
"restart": 重启垃圾回收。
"collect": 执行垃圾回收的完整循环。
"count": 返回 Lua 当前使用的总内存(单位为 Kb)。
"step": 执行一步(一步可由多步组成)垃圾回收。步数可由参数 arg 控制(值越大,步数越多,0 表示执行一步(指最小的一步))。如果执行后完成了回收循环,返回 true。
"setpause": 把 arg/100 作为垃圾回收参数 pause 的新值。
"setstepmul": 把 arg/100 作为垃圾回收参数 step mutiplier 的新值。
进行垃圾回收前后的内存占用情况:
x = collectgarbage("count")
collectgarbage("collect")
x = collectgarbage("count")
dofile (filename)
打开该名字的文件,并执行文件中的 Lua 代码块。 不带参数调用时, dofile 执行标准输入的内容(stdin)。 返回该代码块的所有返回值。 对于有错误的情况,dofile 将错误反馈给调用者 (即,dofile 没有运行在保护模式下)。
同一目录下新建两个 Lua 文件,代码及输出:
-- another.lua
return "Message from another file!"
-- sample.lua
x = dofile("./another.lua")
--& Message from another file!
dofile 在这里等价于
function dofile()
function func()
return "Message from another file!"
return func()
于是等价的输出为
print(dofile()) --& Message from another file!
error (message [, level])
终止所保护的函数,抛出 message 消息,不再返回。
通常这个函数会在抛出的消息前面加上发生错误的地址信息。堆栈等级决定添加哪个地址。如果堆栈等级为 0 ,不返回地址信息;如果为 1,返回 error 语句所在位置;如果为 2,返回调用 error所在函数的位置;依此类推。
error([报错消息],[堆栈等级]=1)
function division(a,b)
if b == 0 then error("Divisor cannot be 0!",2) end
-- level 值为 1 时,错误信息指向这里
return a / b
print(division(5,1))
print(division(5,0))
-- level 值为 2 时,错误信息指向这里
_G 持有全局环境的变量,Lua 本身用不到这个变量,更改变量不会影响到全局环境;反过来也一样。
getfenv (f)
返回函数的环境。 f 可以是一个 Lua 函数,也可以是函数在堆栈中的等级。等级 1 代表调用 getfenv() 的那个函数。如果传入的函数不是 Lua 函数,或者 f 是 0,那么 getfenv 返回 全局环境。
~~[待补充]不是太明白,没能给出合适的代码~~
getfenv([目标函数]=1)
获取全局环境:
for k,v in pairs(_G) do
print(k,v)
table: 0x7ff200f02330
function: 0x7ff200d03cc0
table: 0x7ff200e00000
--tostring
function: 0x7ff200d04560
function: 0x7ff200d046a0
table: 0x7ff200f01cb0
function: 0x7ff200d04610
function: 0x7ff200f006f0
function: 0x7ff200d042f0
--setmetatable
function: 0x7ff200d044a0
function: 0x7ff200d04260
function: 0x7ff200d03fc0
--tonumber
function: 0x7ff200d04500
table: 0x7ff200f014a0
--rawequal
function: 0x7ff200d046f0
--collectgarbage
function: 0x7ff200d04010
table: 0x7ff200e01360
--getmetatable
function: 0x7ff200d04340
function: 0x7ff200f006a0
function: 0x7ff200d047a0
table: 0x7ff200e00040
table: 0x7ff200e00a00
function: 0x7ff200d042b0
table: 0x7ff200f00790
--newproxy
function: 0x7ff200d04820
function: 0x7ff200d045c0
--coroutine
table: 0x7ff200d048c0
table: 0x7ff200d02fc0
function: 0x7ff200d04400
function: 0x7ff200d03000
function: 0x7ff200d03e00
function: 0x7ff200d04750
--loadstring
function: 0x7ff200d04200
function: 0x7ff200d03d70
--_VERSION
function: 0x7ff200d04110
function: 0x7ff200d04450
function: 0x7ff200d041b0
function: 0x7ff200d04160
--loadfile
function: 0x7ff200d043a0
getmetatable (object)
如果对象没有元表,返回空;如果对象有 __metatable 域,返回对应的值;否则,返回对象的元表。
对象有 __metatable 域的情况:
t = {num = "a table"}
mt = {__index = {x = 1,y = 2},__metatable = {__index = {x = 5,y = 6}}}
setmetatable(t, mt)
print(getmetatable(t).__index.x)
print(t.x)
~~进行操作时的元表依旧是与值直接关联的那个元表,不知道这样子处理有什么作用?~~
ipairs (t)
返回三个值:迭代器、传入的表 t、值 0 。迭代器能够根据传入的表 t 和索引 i 得到 i+1 和 t[i+1] 的值。
其实现形式类似于这样:
function ipairs(t)
function iterator(t,i)
i = t[i] and i
-- 如果 t[i] == nil 则 i = nil;否则 i = i
return i,t[i]
return iterator,t,0
使用 ipairs 对表进行遍历,会从键值为 1 开始依次向后遍历,直到值为 nil。
t = {"1","2",nil,[4]="4"}
-- t = {"1","2",[4]="4"}
-- 使用该表会得到相同的输出
for i,v in ipairs(t) do
print(i,v)
load (func [, chunkname])
通过传入函数 func 的返回值获取代码块片段。func 函数的后一次调用返回的字符串应当能与前一次调用返回的字符串衔接在一起,最终得到完整的代码块。函数返回 nil 或无返回值时表示代码块结束。
load 函数会将得到的代码块作为函数返回。返回函数的环境为全局环境。如果出现错误,load 会返回 nil 和 错误信息。
chunkname 作为该代码块的名称,用在错误信息与调试信息中。
loadfile ([filename])
使用方式与 dofile 类似,函数内容与 load 类似。从文件中获取代码块,如果没有指定文件,则从标准输入中获取。
loadfile 把文件代码编译为中间码,以文件代码作为一个代码块(chunk),并返回包含此代码块的函数。
编译代码成中间码,并返回编译后的chunk作为一个函数。 如果出现错误,则返回 nil 以及错误信息。
使用 loadfile,可以一次编译多次运行;而每次使用 dofile,都会执行一次编译。
同一目录下新建两个 Lua 文件,代码及输出:
-- sample.lua
f = loadfile("./sample.lua")
print(f())
--& Message from another file!
-- another.lua
function fun()
print("Message from another file!")
res = fun()
return res
loadfile 在这里等价于
function loadfile()
function fun()
print("Message from another file!")
res = fun()
return res
loadstring (string [, chunkname])
与 load 类似,只不过是从字符串中获取代码块。
要想加载并运行所给的字符串,使用如下惯用形式:
assert(loadingstring(s))()
next (table [, index])
返回传入的表中下一个键值对。
next([表],[键]=nil)
第一个参数是要操作的表,第二个参数是表中的某个键。如果传入的键值为 nil ,则函数返回第一个键值对。如果传入一个有效的键值,则输出下一对键值对。如果没有下一个键值对,返回 nil。
根据定义,可以使用 next 来判断一个表是否为空表。
键值对的遍历顺序是不一定的,即使是对数字索引也是如此。如果想要按照数字索引的顺序获取键值对,参见
t = {"table",["a"] = 5, ["c"] = 6}
-- index 为 nil
print(next(t, nil))
-- index 为 无效键
print(next(t,"d"))
--& 编译错误
-- index 为 数字索引
print(next(t,1))
-- index 为 一般键
print(next(t, "a"))
-- index 为 最后一个键
print(next(t,"c"))
遍历顺序与定义顺序不一致的例子:
t = {[1]="table",b = 4,["a"] = 5, ["c"] = 6, func}
t.func = function (...)
return true
for k,v in pairs(t) do
print(k,v)
function: 0x7f7f63c0ad50
而且从上面的例子中可以看出 name = exp 的键值对形式会占用
返回三个值:next 函数,表 t,nil。通常用来遍历表中的所有键值对。
如果 t 有元方法 __pairs ,将 t 作为参数 传入该函数并返回前三个返回值。
在使用 pairs 函数遍历表的过程中,可以删除域或者修改已有的域,但是如果添加新的域,可能出现无法预期的问题。
t = {"table",["a"] = 5, ["c"] = 6}
for k,v in pairs(t) do
print(k,v)
在遍历表的过程中添加新的域导致问题出现的情况:
t = {"table",["a"] = 5, ["c"] = 6}
for k,v in pairs(t) do
-- 添加一个新的域
if k == 'a' then
print(k,v)
pcall (f [, arg1, ...])
以保护模式调用传入的函数,也就是说不会抛出错误。如果捕获到抛出的错误,第一个参数返回 false,第二个参数返回错误信息;如果没有出现错误,第一个参数返回 ture,后面的参数返回传入函数的返回值。
function fun(a,b)
assert(not(b == 0), "divisor can't be 0 !")
return a / b
success, res = pcall(fun,5,0) --& false .../sample.lua:3: divisor can't be 0 !
success, res = pcall(fun,5,1) --& true
print (...)
仅作为快速查看某个值的工具,不用做格式化输出。正式的格式化输出见 string.format 与 io.write。
rawequal (v1, v2)
以 raw 作为前缀的函数均表示该方法在不触发任何元方法的情况下调用。
rawequal 检查 v1 是否与 v2 相等,返回比较结果。
t = {"value"}
s = "value"
s2 = "value"
print(rawequal(t, s))
print(rawequal(s, s2))
rawget (table, index)
获取 table 中键 index 的关联值,table 参数必须是一个表,找不到返回 nil 。
t = {"value",x = 5}
print(rawget(t, 1))
print(rawget(t, "x"))
print(rawget(t, 2))
print(rawget("value",1))--& bad argument #1 to 'rawget' (table expected, got string)
rawset (table, index, value)
将 table[index] 的值设置为 value 。table 必须是一张表,index 不能是 nil 或 NaN 。value 可以是任何值。返回修改后的 table 。
t = {"value",x = 5}
t2 = {"sub table"}
rawset(t, 1,"new value")
rawset(t, "y", 6)
rawset(t, t2,"sub table")
rawset(t,NaN,"NaN")
--& table index is nil
print(t[1])
--& new value
print(t.y)
print(t[t2])
--& sub table
select (index, ...)
index 可以是数字或者字符 '#' 。当 index 为数字时,返回第 index + 1 个参数及后面的参数(支持负数形式的 index);当 index 为 '#' 时,返回参数的个数(不包括第一个参数)。
t = {"table",x = 5}
t2 = {"table2"}
print(select(
1, 1, t, t2))
table: 0x7fad7bc0a830 table: 0x7fad7bc0ac20
print(select( -3, 1, t, t2))
table: 0x7fad7bc0a830 table: 0x7fad7bc0ac20
print(select("#", 1, t, t2))
setfenv (f, table)
设置函数 f 的环境表为 table 。f 可以是一个函数,或者是代表栈层级的数字。栈层级为 1 的函数是那个调用 setfenv 的函数,栈层级为 2 的函数就是更上一层的函数。 setfenv 返回 f。
特别的,如果 f 为 0,那么 setfenv 会把全局环境设置为 table 。并且不做任何返回。
Lua 的之后版本中去掉了 setfenv 和 getfenv 函数。
使用栈层级操作 setfenv 的例子:
function foobar(...)
-- 设置 foobar 的环境
setmetatable(t, {__index = _G })
setfenv(1,t)
-- 输出 foobar 的环境
for k,v in pairs(getfenv(1)) do
print(k,v)
function foo(...)
-- 设置 foo 的环境,继承 foobar 的环境
local t = {}
setmetatable(t, {__index = _G})
setfenv(1,t)
-- 输出 foo 的环境
for k,v in pairs(getfenv(1)) do
print(k,v)
-- 再次设置 foobar 的环境
setfenv(2, t)
-- 再次输出 foobar 的环境
for k,v in pairs(getfenv(1)) do
print(k,v)
将 setfenv 用于模块加载:
-- sample.lua 文件
local FuncEnv={}
-- 作为环境
setmetatable(FuncEnv, {__index = _G}) -- 为了能够访问原本全局环境的值,将全局环境表(_G)放在元表中
local func=loadfile("other.lua")
-- 返回一个函数,函数以 other 文件内容作为代码块
setfenv(func,FuncEnv)
-- 执行代码块,得到定义的 message 函数,该函数会存在环境中
FuncEnv.message()
--通过环境调用函数,FuncEnv 此时就相当于一个独立模块
-- other.lua 文件
function message()
print("Message from another file!")
本小节参考了 斯芬克斯 的
,icyday 的
两篇博客。
setmetatable (table, metatable)
给 table 关联元表 metatable 。返回参数 table 。
如果元表定义了 __metatable 域,会抛出错误。
metatable 参数为 nil 表示解除已经关联的元表。
-- 关联一个定义了加法操作的元表
t = setmetatable({}, {__add = function(a,b)
if type(a) == "table" and type(b) == "table" then
return a.num + b.num
t2 = {num = 6}
print(t+t2)
-- 只要有一个表进行了关联就能够进行运算
setmetatable(t, nil)
-- 解除关联后再进行加法运算会报错
print(t+t2)
--& attempt to perform arithmetic on global 't' (a table value)
tonumber (e [, base])
tonumber([值],[基数]=10)
尝试把 e 转换为十进制数值并返回。如果无法转换返回 nil 。
base 表示传入参数的进制,默认为 10 进制。base 的可输入范围 [2,36]。高于 10 的数字用字母表示,A-Z 分别表示 11-35 。
print(tonumber(123))
print(tonumber("123"))
print(tonumber("abc"))
print(tonumber("abc", 20))
print(tonumber("ABC", 20))
tostring (e)
能将任意类型的值转换为合适的字符串形式返回。要控制数字转换为字符串的方式,使用
如果值所关联的元表有 __tostring 域,则使用该域的元方法获取字符串。
function func()
print("this is a function")
t = {name = "table"}
print(tostring(123))
print(tostring("abc"))
print(tostring(func))
--& function: 0x7f
print(tostring(t))
--& table: 0x7f
返回 v 的类型,类型以字符串形式返回。 有以下八种返回值: "nil" , "number", "string", "boolean", "table", "function", "thread", "userdata"。
type(false)
--& "boolean"
--& "number"
type("abc")
--& "string"
print(type(nil) == "nil")
unpack (list [, i [, j]])
unpack([列表],[起始位置]=1,[返回个数]=[列表长度])
返回表中的各个域的值,等价于返回
return list[i], list[i+1], ···, list[j]
t = {1,2,3,a = 4,b = 5}
print(unpack(t, 1, 4))
包含有当前解释器版本号的全局变量,当前版本的值为 "Lua 5.1"。
xpcall (f, err [, arg1, ...]
类似。不同的是,如果 f 函数抛出了错误,那么 xpcall 不会返回从 f 抛出的错误信息,而是使用 err 函数返回的错误信息。
function fun(a,b)
-- 这里的参数没什么实际作用,就是展示下用法
error("something wrong !!", 1)
local success, res = pcall(fun,1,2)
print(success,res)
.../sample.lua:2: something wrong !!
local success, res = xpcall(fun,function()
return "an error occured !!"
print(success,res)
an error occured !!
(解释了如何方便地设置函数的环境,以及为什么要那样设置)(介绍了该环境的设置在实际中的一个应用)(对Lua进行了较为全面的介绍)
0 收藏&&|&&5
你可能感兴趣的文章
11 收藏,5.3k
6 收藏,2.4k
分享到微博?
我要该,理由是:

我要回帖

更多关于 数据库 表名 复数 的文章

 

随机推荐