统计元素个数接口--只计算以整数为下标的 第一段连续元素的数目

#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循环

print("----------")
for _, v in pairs(tab) do
    print(v)
end
 
 

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语言注意点归集的更多相关文章

  1. 用VC编译lua源码,生成lua语言的解释器和编译器

    用VC编译lua源码,生成lua语言的解释器和编译器 1.去网址下载源码 http://www.lua.org/download.html 2.装一个VC++,我用的是VC6.0 3.接下来我们开始编 ...

  2. 51CTO专访淘宝清无:漫谈Nginx服务器与Lua语言

    http://os.51cto.com/art/201112/307610.htm 说到Web服务器,也许你第一时间会想到Apache,也许你会想到Nginx.虽然说Apache依然是Web服务器的老 ...

  3. 【quick-cocos2d-x】Lua 语言基础

    版权声明:本文为博主原创文章,转载请注明出处. 使用quick-x开发游戏有两年时间了,quick-x是cocos2d-Lua的一个豪华升级版的框架,使用Lua编程.相比于C++,lua的开发确实快速 ...

  4. lua语言入门之Sublime Text设置lua的Build System

    转自: http://blog.csdn.net/wangbin_jxust/article/details/8911956 最近开始学习LUA语言,使用Sublime Text作为编辑器,不得不说, ...

  5. 编译并使用Lua语言

    Lua是一个小巧的脚本语言,该语言设计的目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能. 可扩展性.Lua的扩展性非常卓越,可以通过Lua代码或C代码扩展,很多功能可以通过外部库来扩 ...

  6. Lua语言在Wireshark中使用(转)

    1.       检查Wireshark的版本是否支持Lua 打开Wireshark,点击“HelpàAbout Wireshark”菜单,查看弹出的对话框,如果有“with Lua 5.1”表示支持 ...

  7. Unity进阶----Lua语言知识点(2018/11/08)

    国内开发: 敏捷开发: 集中精力加班堆出来第一个版本 基本没啥大的bug 国外开发: 1).需求分析: 2).讨论 3).分模块 4).框架 5).画UML图(类图class function)(e- ...

  8. lua语言自学知识点----Lua与.Net相互调用

    知识点: LuaInterface作用是用来完成Lua与C#的相互调用. LuaInterface核心库:1.luainterface.dll 用于C#读取lua(放在bin目录同级) 2.luane ...

  9. lua 语言笔记

    Lua语言基础汇总(1) -- 类型与值 基础介绍 Lua是一种动态类型的语言.在语言中没有类型定义的语法,每个值都带有其自身的类型信息.在Lua中有8种基本类型,分别是: nil(空)类型 bool ...

随机推荐

  1. Android js相互调用

    一.webview相当于android中的浏览器,基于webkit开发,可以浏览网页文件,支持css javas cript 以及html webview.getSettings().setJavaS ...

  2. 【POJ】3648 Wedding

    http://poj.org/problem?id=3648 题意:n对人(编号0-n-1,'w'表示第一个人,'h'表示第二个人),每对两个,人坐在桌子两侧.满足:1.每对人中的两个人不能坐在同一侧 ...

  3. android中利用Socket实现手机客户端与PC端进行通信

    1. 项目截图

  4. QQ 微信 新浪 无法 分享 收集

    1.网络请求报错.升级Xcode 7.0发现网络访问失败.输出错误信息 The resource could not be loaded because the App Transport Secur ...

  5. iOS应用内付费(IAP)开发步骤列表

    iOS应用内付费(IAP)开发步骤列表 前两天和服务端同事一起,完成了应用内付费(以下简称IAP, In app purchase)的开发工作.步骤繁多,在此把开发步骤列表整理如下.因为只是步骤列表, ...

  6. Linux常见练习题

    1./dev/hda5在Linux中表示什么? A. IDE0接口上从盘       B. IDE0接口上主盘的逻辑分区 C. IDE0接口上主盘的第五个分区    D.IDE0接口上从盘的扩展分区  ...

  7. 十、ios 模态窗口[实例]

    一.模态窗口概念 对话框一般分为两种类型:模态类型( modal )与非模态类型( modeless ).所谓模态对话框,就是指除非采取有效的关闭手段,用户的鼠标焦点或者输入光标将一直停留在其上的对话 ...

  8. 相邻div实现一个跟着另一个自适应高度示例代码

    方法一: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> < ...

  9. centos下安装mysql遇到的问题

    我前边遇到的坎,竟然和这篇百度经验惊人的相似,他帮我大忙了,十分感谢作者啊,连接双手奉上http://jingyan.baidu.com/article/ce436649fec8533773afd38 ...

  10. 数组遍历map和each使用

    <body> <input type="/> <input type="/> <input type="/> </b ...