最近要做机械臂仿真和实物的编程,发现很多都是使用Lua这门脚本语言来进行编程控制的,因此就学习了一下,并且写了几个入门的小例程,在这里分享一下。
0.软件安装
直接到官网下载安装包,按照指示一步步安装即可。http://www.lua.org/versions.html,我用的是5.1.4的版本
1.HelloWorld.lua
打印直接使用print语句。注释使用--,多行注释用两个中括号,数据类型有string、number、function、boolean等。
print('Hello') --注释
print('World')
print("Hello World!")
--[[
多行
注释
--]]
print("哈哈哈哈")
--数据类型
print(type("Hello World!!"))
print(type(10.4 * 3))
print(type(10))
print(type(print))
print(type(type))
print(type(true))
print(type(nil))
print(type(type(X)))
--从键盘读取
io.write("Input your name: \n")
name = io.read()
print ("Your name is "..name)
2.布尔字符和表.lua
Lua语言中的变量全部为全局变量,除非用local声明才会成为局部变量。
并且Lua语言只把false和nil看做是false。其它都为true,包括数字0,也会看做是true
--Lua语言中的变量全部为全局变量,除非用local声明才是局部变量
--Lua语言只把false和nil看做是false。其它都为true,0也是true
if 0 then
print(false)
else
print(true)
end
--在对一个数字字符串进行算数操作时,Lua会尝试将这个数字字符串转换为一个数字
print("2" + 6) --8
print("2" + "6") --8
print("2 + 6") --2 + 6
print("2e2" * "6") --1200
--字符串长度
print(#"2 + 6") --5
--字符串连接
print("a" .. "b") --ab
print(127 .. "158") --127158
--table 表,默认索引从1开始
--table表添加元素时,可以和对应索引一起添加,索引不一定是数字,如果直接添加,table会有默认索引,从1开始,如果先添加2在插入1,默认索引就会到3
a = {}
a["key"] = "value"
print(a["key"], a.key) --当索引为字符串是也可以使用后边这种写法
a[2] = 10
print(a[2])
table.insert(a, "insert1")
print(a[1])
table.insert(a, "insert3")
print(a[3])
for key, val in pairs(a) do --输出键值对
print(key, val)
end
3.table.lua
Lua语言表的操作主要有以下几个
--基本操作
mytable = {}
mytable[1] = "haha"
mytable = nil --可以释放表的空间
--table.concat(),输出一个列表中的元素连接成的字符串
fruits = {"banana", "orange", "apple"}
print(table.concat(fruits)) --直接连接
print(table.concat(fruits, ",")) --指定连接字符
print(table.concat(fruits, "", 2, 3)) --指定索引连接
--table.insert和table.remove
--在表的末尾处插入mango
table.insert(fruits, "mango")
print(table.concat(fruits, ","))
--删除表末尾的mango
table.remove(fruits)
print(table.concat(fruits, ","))
--在索引2处插入mango
table.insert(fruits, 2, "mango")
print(table.concat(fruits, ","))
--删除索引2处的mango
table.remove(fruits, 2)
print(table.concat(fruits, ","))
--table.sort(),用于表的排序
table.sort(fruits)
print(table.concat(fruits, ","))
4.循环.lua
下边的程序是我抄的例程,但是在我的电脑上运行有问题,goto语句用不了,不知道为什么
--lua中没有continue语句,控制循环需要使用break和goto指令
for i = 10, 1, -1 do
repeat
if i == 5 then
print("continue code here")
break
end
print(i, "loop code here")
until true
end
--goto语句不能用,不知道为啥
for i = 1, 3 do
if i <= 2 then
print(i, "yes continue")
goto=continue
end
print(i, "no continue")
:: continue ::
print(i, 'm end')
end
5.迭代器.lua
pairs可以遍历表中的所有部分,包括数组部分和非数组部分
ipairs只可以遍历表中的数组部分
下边程序里边那个无状态的迭代器还是值得研究一下的,可能得多看几眼,但是也不难
--泛型for迭代器
--pairs可以遍历表中的所有部分,包括数组部分和非数组部分
--ipairs只可以遍历表中的数组部分
t = {"Google", "Runoob"}
t["Key"] = "Edge"
for k, v in pairs(t) do
print(k, v)
end
print()
for k, v in ipairs(t) do
print(k, v)
end
print()
--无状态的迭代器:无状态的迭代器指不保留任何状态的迭代器,在循环中可以利用无状态迭代器避免创建闭包话费额外的代价
function square(iteratorMaxCount, currentNumber)
if currentNumber < iteratorMaxCount then
currentNumber = currentNumber + 1
return currentNumber, currentNumber * currentNumber
end
end
for i, n in square, 3, 0 do
print(i, n)
end