Lua的编程实例

以前准备写这么篇文章,一直没动手起来,现在在这贴上我编写的一些Lua简单实例源码,跟大家分享下。

转载请注明出处!

 

--[[ 当函数参数很多的时候,这种用表的结构作为实参,是很好的传参方式
w = Window {
x=0, y=0, width=300, height=200,
title = "Lua", background="blue",
border = true
}
function Window(options)
-- check mandatory options
if type(options.title) ~= "string" then
error("no title")
elseif type(options.width) ~= "number" then
error("no width")
elseif type(options.height) ~= "number" then
error("no height")
end

-- everything else is optional
_Window(options.title,
options.x or 0, -- default value
options.y or 0, -- default value
options.width, options.height,
options.background or "white", -- default
options.border -- default is false (nil)
)
--]]


--[[
	逻辑运算符
	and or not

	逻辑运算符认为false和nil是假(false),其他为真,0也是true.
	and和or的运算结果不是true和false,而是和它的两个操作数相关。
	a and b -- 如果a为false,则返回a,否则返回b
	a or b 	-- 如果a为true,则返回a,否则返回b


	一个很实用的技巧:如果x为false或者nil则给x赋初始值v
	x = x or v
	等价于
	if not x then
	x = v
	end

	and的优先级比or高。

	C语言中的三元运算符
	a ? b : c
	在Lua中可以这样实现:
	(a and b) or c

--]]



--[[
	构造函数可以使用任何表达式初始化,也可以直接初始化数组。
	如Lua将第一个元素初始化days[1](第一个元素索引为1)

	如果想初始化一个表作为记录数据使用可以这样:
	a = {x=0, y=0}  相当于  a = {}; a.x=0; a.y=0

	在构造函数的最后的","是可选的,可以方便以后的扩展。
	a = {[1]="red", [2]="green", [3]="blue",}

	在构造函数中域分隔符逗号(",")可以用分号(";")替代,通常我们使用分号用来分割不同类型的表元素。
	{x=10, y=45; "one", "two", "three"}

	如果真的想要数组下标从0开始:
	days = {[0]="Sunday", "Monday", "Tuesday", "Wednesday",
	"Thursday", "Friday", "Saturday"}
	注意:不推荐数组下标从0开始,否则很多标准库不能使用。
--]]

print("------------用表做数组")
days = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}
print(days[3])	--输出:Tuesday

--[[
	每次调用构造函数,Lua都会创建一个新的table,可以使用table构造一个list

	不管用何种方式创建table,我们都可以向表中添加或者删除任何类型的域(即表中的数据可以是八种基本类型中的一种),构造函数仅仅影响表的初始化?
	也就是说table中的成员可以是 function函数、table表等数据类型(可以参考下面的实例 “一种简单的对象实现方式”)
--]]

print("-----------使用table表构造一个链表list")
list = nil
--for line in io.lines() do
for x = 1,10 do
	list = {next=list, value=x}
end

local i = 1
while i <= 10 do
	print(list.value)
	i = i + 1
	list = list.next
end

--[[
	 可以嵌套构造函数来表示复杂的数据结构.
--]]
--在同一个构造函数中可以混合列表风格和record风格进行初始化,如下
polyline = {color="blue", thickness=2, npoints=4,
	{x=0, y=0},
	{x=-10, y=0},
	{x=-10, y=1},
	{x=0, y=1}
	}

print(polyline[2].x)	 --输出: -10

--[[ 循环语句--]]
--数值for循环打印一组数
print("-----------------数值for循环")

for i = 1, 10 do
	print(i)
end

--[[
	范型for循环,print all keys of table 't'
--]]
print("----------------范型for循环")
--t = {7,8,34,10,65,23,11}
t = {}
t2 = {x = 1, ["hello"] = "world!"}

t.astring = "ni,hao!"
t[1] = 100
t["a table"] = b

function foo()
end
function bar()
end
t[foo] = bar

--分别穷举表t和t2
for k,v in pairs(t) do
	print(k,"==>",v)
end
print("-------------------------")
for k,v in pairs(t2) do
	print(k, "==>", v)
end


--[[
	while循环
--]]
print("while loop demo")
x = 10
l
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值