这几天在看一个叫murphy的东西,主要是管理系统的音频。用到了lua,特此记录一下
--run this programe dofile("lib1.lua")
function norm (x, y)
local n2 = x^2 + y^2
return math.sqrt(n2)
end
function twice (x)
return 2*x
end
-- 此处x为全局变量
x=10
local i =1
while i<=x do
local x = i*2 -- 此处x为局部变量
print(x)
i=i+1
end
--[[
--多行注释
--尽可能的使用局部变量,因为访问局部变量要比访问全局变量快
--]]
--
if i>20 then
local x
x=20
print(x+2)
else
print(x)
end
print(x)
-- if语句的三种形式
if i>10 then
print()
end
if i==10 then
print()
else
print()
end
if i==10 then
print()
elseif i>10 then
print()
elseif i>11 then
print()
else
print()
end
-- while 循环
while i<10 do
print()
end
-- for循环
for var=1,10 do
print(var)
end
local found = nil
for i=1,10 do
if i == 5 then
found = i
break;
end
end
print("found="..found)
local a1 = "hello"
local a2 = "world"
print(a1..a2) -- ..相当于C++中的+运算符
-- 返回多个值
s, e = string.find("hello Lua users", "Lua")
print(s,e)
function mainnum(a)
local mi =1;
local m = a[mi]
for i,val in ipairs(a) do
if val >m then
mi = i
m = val
end
end
return m ,mi
end
print(mainnum({8,24,36,2,14,78,25}))
-- lua的闭包原则
function newCounter()
local i = 0
return function()
i = i+1
return i
end
end
c1 = newCounter()
print(c1()) --> 1
print(c1()) --> 2
c2 = newCounter()
print(c2()) --> 1
print(c1()) --> 3
print(c2()) --> 2
-- ***************非全局函数
-- 表和函数放在一起
Lib = {}
Lib.foo = function(x,y) return x+y end
Lib.goo = function(x,y) return x-y end
-- 使用表构造函数
Lib = {
foo = function(x,y) return x+y end,
goo = function(x,y) return x-y end
}
-- 使用局部函数
local f =function(...)
-- ...
end
local g =function(...)
f()
end
local function f(...)
end
-- 声明递归的局部函数
local fact = function(n)
if n ==0 then
return 1
else
return n*fact(n-1) -- 此处查找辉查找fact是否为全局函数
end
end
-- 正确的声明递归的局部函数如下
local fact
fact = function(n)
if n ==0 then
return 1
else
return n*fact(n-1) -- 此处查找辉查找fact是否为全局函数
end
end
--正确的用
function f(x)
return g(x)
end
-- n(x)可以是一个复杂的表达式,此种调用也算是尾调用
function m(x)
return n(x[j],i+j)
end
-- 错误的尾调用
function f(x)
return g(x) +1
end
function room1 ()
local move = io.read()
if move == "south" then
return room3()
elseif move == "east" then
return room2()
else
print("invalid move")
return room1() -- stay in the same room
end
end
function room2 ()
local move = io.read()
if move == "south" then
return room4()
elseif move == "west" then
return room1()
else
print("invalid move")
return room2()
end
end
function room3 ()
local move = io.read()
if move == "north" then
return room1()
elseif move == "east" then
return room4()
else
print("invalid move")
return room3()
end
end
function room4 ()
print("congratilations!")
end
-- 迭代器与闭包
function list_iter(t)
local i =0
local n = table.getn(t)
return function()
i = i+1
if i<=n then return t[i] end
end
end
t = {10,20,30,40}
iter = list_iter(t)
while true do
local element = iter()
if element == nil then break end
print(element)
end
for element in list_iter(t) do
print(element)
end
-- loadstring 生成一个函数调用
f = loadstring("local a = 10; return a+20")
print(f()) --> 30
lua的语法比较怪,不太适应,可以直接使用全部变量而不用申明。可以返回多个值,以上的只是学习的一部分,以后会慢慢补充
浙公网安备 33010602011771号