x = a or b

如果a为真则x = a

如果a为假则x = b

print(a .. b)

任何非nil类型都会被连接为字符串,输出

多重返回值

local s,e = string.find("Hello World", "Wo")

print(s .. " : " .. e)

自定义函数

function getMax(arr)
local maxValue, maxPos
maxValue = arr[1]
maxPos = 1
for i=1,#arr do
if arr[i] > maxValue then
maxValue = arr[i]
maxPos = i
end
end
return maxPos, maxValue
end print(getMax{20, 50, 10, 40, 30})

unpack函数

print(unpack{20, 50, 10, 40, 30})

它接受一个数组作为参数,并从下标1开始返回数组的所有元素

变长参数

function add( ... )
local s = 0
for i,v in ipairs{ ... } do
s = s + v
end
return s
end
print(add(1, 2, 3, 4))

返回所有实参

function add( ... )
return ...
end
print(add(1, 2, 3, 4))

通常一个函数在遍历其变长参数时只需要使用表达式{ ... }

但是变长参数中含有nil则只能使用函数select了

select("#", ...)返回所有变长参数的总数,包括nil

print(#{1, 2, 3, 4, 5, nil}) -->5

print(select("#", 1,2,3,4,5,nil)) -->6

具名实参

函数调用需要实参表和形参表进行匹配,为了避免匹配出错,而使用具名实参。

例:

function Window( options )
_Window(options.title,
options.x or 0,
options.y or 0,
options.width, options.height,
options.background or "white",
options.border
)
end w = Window{x = 0, y = 0, width = 300, height = 200,
title = "Lua", background = "blue",
border = true
}

深入函数

LUA中函数与所有其他值一样都是匿名的:当讨论一个函数时,实际上是在讨论一个持有某函数的变量。

a = {p = print}

a.p("Hello")

print = os.date()

a.p(print)

一个函数定义实际就是一条语句(赋值语句)

将匿名函数传递给一个变量

foo = function() return "Hello World" end

print(foo())

等价于我们常见的

function foo()

return "Hello World"

end

匿名函数

arr = {
{name = "A", score = 99},
{name = "B", score = 95},
{name = "C", score = 96},
{name = "D", score = 97},
} table.sort(arr, function (a, b) return (a.name < b.name) end)
for i,v in ipairs(arr) do
print(v.name)
end

LUA学习笔记(第5-6章)的更多相关文章

  1. LUA学习笔记(第1-4章)

    需要一种简单的脚本语言来代替批处理,它需要足够小巧,同时功能上也应该足够强劲,自然选择了LUA语言. 第一章 Hello World print('Hello World') print(" ...

  2. LUA学习笔记(第18-20章)

    数学库 print(math.pi)-->π print(math.huge)-->Lua中表示的最大数字 --[[ 3.1415926535898 1.#INF ]] print(mat ...

  3. [转]LUA 学习笔记

    Lua 学习笔记 入门级 一.环境配置 方式一: 1.资源下载http://www.lua.org/download.html 2.用src中的源码创建了一个工程,注释调luac.c中main函数,生 ...

  4. 《深入Java虚拟机学习笔记》- 第19章 方法的调用与返回

    <深入Java虚拟机学习笔记>- 第19章 方法的调用与返回

  5. 《深入Java虚拟机学习笔记》- 第16章 控制流

    <深入Java虚拟机学习笔记>- 第16章 控制流

  6. 《深入Java虚拟机学习笔记》- 第17章 异常

    <深入Java虚拟机学习笔记>- 第17章 异常

  7. 《深入Java虚拟机学习笔记》- 第13章 逻辑运算

    <深入Java虚拟机学习笔记>- 第13章 浮点运算

  8. 《深入Java虚拟机学习笔记》- 第14章 浮点运算

    <深入Java虚拟机学习笔记>- 第13章 浮点运算

  9. Lua 学习笔记(一)

    Lua学习笔记 1.lua的优势 a.可扩张性     b.简单     c.高效率     d.和平台无关 2.注释 a.单行注释 --        b.多行注释 --[[  --]] 3.类型和 ...

随机推荐

  1. $Poj3017\ Cut\ The\ Sequence$ 单调队列优化$DP$

    Poj   AcWing Description 给定一个长度为N的序列 A,要求把该序列分成若干段,在满足“每段中所有数的和”不超过M的前提下,让“每段中所有数的最大值”之和最小. N<=10 ...

  2. Spring Security入门(基于SSM环境配置)

    一.前期准备 配置SSM环境 二.不使用数据库进行权限控制 配置好SSM环境以后,配置SpringSecurity环境 添加security依赖   <dependency> <gr ...

  3. Theia APIs——Preferences

    上一篇:Theia APIs——命令和快捷键 Preferences Theia有一个preference service,模块可以通过它来获取preference的值,提供默认的preference ...

  4. 一条SQL注入引出的惊天大案2:无限战争

    前情回顾: 经过黑衣人和老周的合作,终于清除了入侵Linux帝国的网页病毒,并修复了漏洞.不曾想激怒了幕后的黑手,一场新的风雨即将来临. 详情参见:一条SQL注入引出的惊天大案   风云再起 小Q是L ...

  5. OpenStack Identity API v3 (CURRENT)

    Table Of Contents Identity API v3 (CURRENT) Authentication and token management Password authenticat ...

  6. docker安装mtproto及报错解决方案

    安装docker:curl -sSL https://get.daocloud.io/docker | sh 给权限:usermod -aG docker [current_user] 启动:syst ...

  7. Scala实践10

    1.模式匹配 模式匹配是一种根据模式检查值的机制.它是switch(Java中语句)的更强大版本,它同样可以用来代替一系列if / else语句. 句法 匹配表达式具有值,match关键字和至少一个c ...

  8. 通过例子进阶学习C++(五)计算2的1次方至2的64次方之和

    本文是通过例子学习C++的第五篇,通过这个例子可以快速入门c++相关的语法. 1.上篇回顾 在上一篇中,我们通过字符数组计算264次方: 通过例子进阶学习C++(四)计算2的64次方 带着这个问题:为 ...

  9. 七牛云 融合CDN测试域名 -> 融合CDN加速域名

    七牛云 融合CDN测试域名 -> 融合CDN加速域名 本篇主要讲解 如何将七牛云融合CDN测试域名 切换到自定义的加速域名上去,为什么会写这篇是因为我收到了一封 [七牛云]测试域名回收通知的邮件 ...

  10. Oracle安装连接常见错误

    oracle安装注意:安装路径url不能带中文C:\app\59428\product\11.2.0\dbhome_1\sqldeveloper打开sqldeveloper的时候,需要输入java.e ...