LUA语言注意点归集
统计元素个数接口--只计算以整数为下标的 第一段连续元素的数目
#tab 和 table.getn()
http://ju.outofmemory.cn/entry/29450
我们修改table:
tab = {1, 4, 5, 8}
print(#tab) --=====> 4
print(table.getn(tab)) --=====> 4
tab[9] = 10
print(#tab) --=====> 4
print(table.getn(tab)) --=====> 4
print(tab[9]) --=====> 10
使用上述的两种方法,发现返回的table元素依旧是4。为什么呢,我们再把上面的代码修改为:
tab = {1, 4, 5, 8}
print(#tab) --=====> 4
print(table.getn(tab)) --=====> 4
tab[5] = 10
print(#tab) --=====> 5
print(table.getn(tab)) --=====> 5
print(tab[5]) --=====> 10
我们可以看到,这段代码可以得到我们想要的结果。
如果要打印总体数目, 包括以hash值为key的元素, 需要使用for循环
http://www.cnblogs.com/jeJee/archive/2012/09/22/2697952.html
对于Lua里没有continue的问题相信很多用lua的人都遇到过,官方也有作出了解释。
那么如何用别的机制来代码continue呢?有一个比较简单的方法:在循环内套一个repeat ... until true,再将想用continue的地方写成break。如:

for i = 1, 10 do
repeat
if i == 5 then
break
end
print(i)
until true
end

元表实现对象间属性继承
如果把对象特殊对待为类原型, 则为类继承。
setmetatable 指定元表
元表的__index指向为被继承的对象。
local base = {a=}
print(base.a)
local inst = {}
print(inst.a)
setmetatable(inst, base)
print(inst.a)
base.__index = base
print(inst.a)
函数可变参数获取
http://www.cnblogs.com/cbscan/articles/2022164.html
arg 对象 和 select 方法均是获取 可变参数 ...
且两者使用上互斥, 使用了select, lua解析器就不会再构造arg对象。
function printArgLength(a, ...)
--print(select("#", ...))
print(#arg)
--print(select(2, ...))
end
printArgLength(, , )
函数可变参数原样获取
func(...) 定义的函数, 使用时候 func(a, b, c)
在此函数定义中, 只能获取arg对象, 如果需要 类似 func(a, b, c)形式 将arg对象, 传递给调用函数, 则需要使用unpack方法
function unpack(t, i)
i = i or 1
if t[i] then
return t[i], unpack(t, i + 1)
end
end
例如将 format中 元素个数不固定, 但是format在第一个的函数定义情况:
function fwrite(fmt, ...)
return io.write(string.format(fmt, unpack(arg)))
end
如果一个函数定义为 func(tab, ....)
此函数, 需要返回 tab(一个表)的upack形式(,分割参数), 并添加...参数(若干, 分割参数), 则使用此函数
local function myunpack(packs, ...)
local ret = {}
if "table" == type(packs) then
for i, v in ipairs(packs) do
ret[i] = v
end
end
local n = table.maxn(ret)
for i, v in ipairs(arg) do
ret[n + i] = v
end
return unpack(ret)
end
module 定义 ... 和 package.seeall
module(..., package.seeall)
1、 第一个参数为..., 表示 此模块以文件名为准, 如果不是则使用此字符串作为模块名。
2、 第二个参数为 seeall 表示, 此模块内可以引用 所有全局环境。
3、 require 返回的module对象为一个表, 此表没有元表, 但是如果 定义的seeall, 则可以引用全局环境。 即此模块可以访问全局环境, 不是使用元表来实现。 moduleAa.lua
local print = print
local getfenv = getfenv
local pairs = pairs
local tostring = tostring
--module (..., package.seeall)
module (...)
a =
function printTest()
print("module in printAa print")
for k,v in pairs(getfenv()) do
print("k="..k..", v="..tostring(v))
end
end
moduleb.lua
local model = require("moduleAa")
--model.printTest()
print(type(model))
for k,v in pairs(model) do
print("k="..k..", v="..tostring(v))
end
model.print("helll")
LUA语言注意点归集的更多相关文章
- 用VC编译lua源码,生成lua语言的解释器和编译器
用VC编译lua源码,生成lua语言的解释器和编译器 1.去网址下载源码 http://www.lua.org/download.html 2.装一个VC++,我用的是VC6.0 3.接下来我们开始编 ...
- 51CTO专访淘宝清无:漫谈Nginx服务器与Lua语言
http://os.51cto.com/art/201112/307610.htm 说到Web服务器,也许你第一时间会想到Apache,也许你会想到Nginx.虽然说Apache依然是Web服务器的老 ...
- 【quick-cocos2d-x】Lua 语言基础
版权声明:本文为博主原创文章,转载请注明出处. 使用quick-x开发游戏有两年时间了,quick-x是cocos2d-Lua的一个豪华升级版的框架,使用Lua编程.相比于C++,lua的开发确实快速 ...
- lua语言入门之Sublime Text设置lua的Build System
转自: http://blog.csdn.net/wangbin_jxust/article/details/8911956 最近开始学习LUA语言,使用Sublime Text作为编辑器,不得不说, ...
- 编译并使用Lua语言
Lua是一个小巧的脚本语言,该语言设计的目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能. 可扩展性.Lua的扩展性非常卓越,可以通过Lua代码或C代码扩展,很多功能可以通过外部库来扩 ...
- Lua语言在Wireshark中使用(转)
1. 检查Wireshark的版本是否支持Lua 打开Wireshark,点击“HelpàAbout Wireshark”菜单,查看弹出的对话框,如果有“with Lua 5.1”表示支持 ...
- Unity进阶----Lua语言知识点(2018/11/08)
国内开发: 敏捷开发: 集中精力加班堆出来第一个版本 基本没啥大的bug 国外开发: 1).需求分析: 2).讨论 3).分模块 4).框架 5).画UML图(类图class function)(e- ...
- lua语言自学知识点----Lua与.Net相互调用
知识点: LuaInterface作用是用来完成Lua与C#的相互调用. LuaInterface核心库:1.luainterface.dll 用于C#读取lua(放在bin目录同级) 2.luane ...
- lua 语言笔记
Lua语言基础汇总(1) -- 类型与值 基础介绍 Lua是一种动态类型的语言.在语言中没有类型定义的语法,每个值都带有其自身的类型信息.在Lua中有8种基本类型,分别是: nil(空)类型 bool ...
随机推荐
- [Cocos2D-x For WP8]CocosDenshion音频播放
Cocos2D-x的音频分为长时间的背景音乐和短的音效两种,我们可以通过SimpleAudioEngine::sharedEngine()方法来获取音频播放的引擎,然后调用对音频相关的操作方法就可以了 ...
- 【BZOJ1901】Zju2112 Dynamic Rankings
Description 给定一个含有n个数的序列a[1],a[2],a[3]……a[n],程序必须回答这样的询问:对于给定的i,j,k,在a[i],a[i+1],a[i+2]……a[j]中第k小的数是 ...
- AIX日常维护
1 /etc/security/limits与limit命令 AIX 5.3上 下面是文件/etc/security/limits文件里面有关软限制和硬限制的部分. * * Sizes are in ...
- iOS Xcode7免证书真机调试
在Xcode 7 正式发布的日子里,苹果再次给开发者带来了惊喜,从此以后只要是真机调试的时候,不再需要花99刀去购买开发者证书,但是如果APP需要上架依旧还是需要购买开发者证书的.这个惊喜对正在学习i ...
- Linux的磁盘分区(1)
分区命名: 1.Linux下的分区命名不同于windows下的命名,对硬盘如IDE硬盘采用类似/dev/hdxy的方式来命名,其中hd表示分区所在的设备类型,如IDE硬盘,x表示硬盘盘号(a为基本主盘 ...
- PHP slim restfull框架nginx 配置
http://docs.slimframework.com/ 下载地址这个东西很不错,照到官方的例子做 <?php require 'vendor/autoload.php'; $app = n ...
- VS2010 F5调试时出现:“ 尝试运行项目时出错:未捕获通过反射调用的方法引发的异常”解决
VS2010 F5调试时出现 尝试运行项目时出错:未捕获通过反射调用的方法引发的异常 两个解决方法:1) 打开项目属性,选择调试选项卡,将“启用非托管代码调试”一项钩上.2) 打开项目属性,选择调试选 ...
- Java基础:继承,封装,多态,抽象类,接口
只要是从事Java语言有关的开发工作,在面试中难念会被问到这几个东西. 博主学习java有两年多了,算是浅显的知道一些,抄写了一些解释分享一下. 1.什么是面向对象?(面对女朋友) 面向对象(Obje ...
- Linux_JDK安装
一.下载linux版本的jdk压缩包(这里安装jdk1.7版本,子版本随意,选择*.tar.gz文件下载) 下载目录:http://www.oracle.com/technetwork/java/ja ...
- HDU 5762
Teacher Bo Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Tot ...