Lua 函数小练习


--------------------
--lua 创建链表 并打印
list = nil
for line in io.lines() do
    list = {next = list, value = line}
end

local l = list
while l do
    print(l.value)
    l = l.next
end
---------------------

ployline = {color = "blue", thickness = 2, npoints = 4,
{x = 0, y = 0},
{x = -10, y = 0},
{x = -10, y = 1}
}

print(ployline[2].x)
print(ployline[4].x)
-----------------------

---------------
--cache小例子---
---------------

local test_cache = {}

function set_cache(cache, key, value)
    -- body
    if cache == nil then
        cache = test_cache
    end
    cache[key] = value
end

function get_cache( cache, key )
    if cache == nil then
        cache = test_cache
    end
    if cache[key] ~= nil then
        return cache[key]
    end
end

function print_cache( cache )
    -- body
    if cache == nil then
        cache = test_cache
    end
    for k, v in ipairs(cache) do
        print("key=" .. k , "value=" .. v)
    end
end

local test_msg = {"aaa", "bbb", "ccc"}
for k , v in ipairs(test_msg) do
    set_cache(test_cache, k, k)
end
print_cache(test_cache)
-----------------------------
--计算平均数
function avg( ... )
    local result
    local args = { ... }
    for i,v in ipairs(args) do
        result = result + v
    end
    print("总共传入的参数个数为" .. #args)
    return result/#args
end

------------------------------
a = {  
{name = "aa",hp = "50"},  
{name = "zz",hp = "30"},  
{name = "cc",hp = "70"},  
}  
--将table a 从小到大排列,然后输出
table.sort( a, function(a,b) return (a.hp < b.hp) end)
for i,v in ipairs(a) do
    print(i,v.hp)
end

----------------------------------
--想根据学生的成绩从高到低对学生进行排序
names = {"Peter", "Paul", "Mary"}
grades = {Mary = 10, Paul = 7, Peter = 8}
table.sort( names, function(n1, n2) return (grades[n1] > grades[n2]) end)

-----------------------------------
--一个闭合函数
function count( ... )
    local x = 1
    return function()
        x = x + 1
        return x
    end
end

c = count()
print(c())
print(c())
print(c())
-----------------------------------
--将函数存储在table中
--方式一
Lib = {}
Lib.foo = function (x,y) return x + y end
Lib.goo = function (x,y) return x - y end

print(Lib.foo(1,2));   --> 3
print(Lib.goo(1,2));   --> -1

--方式二
Lib = {
foo = function (x,y) return x + y end,
goo = function (x,y) return x - y end }

print(Lib.foo(1,2));   --> 3
print(Lib.goo(1,2));   --> -1

--方式三
Lib = {}
function Lib.foo (x,y)
return x + y
end
function Lib.goo (x,y)
return x - y
end

print(Lib.foo(1,2));   --> 3
print(Lib.goo(1,2));   --> -1
---------------------------------------
--声明局部函数的两种方式
--方式一
local f = function ( ... )
    -- body
end
--方式二
local function function_name( ... )
    -- body
end
---------------------------------------
--递归函数
local function fact( n )
    if n == 0 then
        return 1
    else 
        return n * fact(n-1)
    end
end

print(fact(5))
----------------------------------------

猜你喜欢

转载自blog.csdn.net/u010859498/article/details/81316486