Lua中非全局函数的写法

这里共有三种写法,这里基本上是将函数和表组合的写法.

1.表和函数放在一起

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

2.使用且构造函数

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

注意第一个函数后面有一个逗号”,”

3.Lua提供的另一种语法

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

当我们将函数保存在一个局部变量内时,我们得到一个局部函数,也就是说局部函数像局部变量一样在一定范围内有效。这种定义在包中是非常有用的:因为 Lua把 chunk当作函数处理,在 chunk内可以声明局部函数(仅仅在 chunk 内可见),词法定界保证了包内的其他函数可以调用此函数。下面是声明局部函数的两种方式:

1.方式一

local f = function (...)
    ...
end

local g = function (...)
    ....
    f()  -- external local 'f' is visible here
    ...
end

2.方式二

local function f (...)
    ...
end

有一点需要注意的是在声明递归局部函数的方式:

错误的写法:

local fact = function (n)
    if n == 0 then
        return 1
    else
        return n * fact(n - 1)     --buggy
    end
end

上面这种试导致Lua编译时遇到fact(n-1)并不短简他是局部函数fact, Lua会去查找是否有这样的全局函数fact.为了解决此问题,我们必须在定义函数以前声明一下局部函数:

local fact

fact = function (n)
    if n == 0 then
        return 1
    else
        return n * fact(n - 1)
    end
end

这样在fact内部fact(n-1)调用的是一个局部函数调用,运行时fact就可以获取正解的值.

但是 Lua 扩展了他的语法使得可以在直接递归函数定义时使用两种方式都可以。
在定义非直接递归局部函数时要先声明然后定义才可以:

local f, g     -- `forward' declarations

function g ()
    ... f() ...
end

function f ()
    ... g() ...
end

===================== ===================== =====================

Lua中函数的调用方法:

在交互模式下:

> dofile(“lib1.lua”) — load your library
> n = norm(3.4, 1.0)
> print(twice(n)) –> 7.0880180586677

46 thoughts on “Lua中非全局函数的写法

  1. Pingback: near

  2. Pingback: social impact marketing

  3. Pingback: ศัลยกรรมเกาหลี

  4. Pingback: Slager hengelo

  5. Pingback: sex

  6. Pingback: พนันบอล

  7. Pingback: ti le bong da truc tuyen

  8. Pingback: www.cbd-campus.com

  9. Pingback: ping google

  10. Pingback: cbd oil

  11. Pingback: porn

  12. Pingback: 안전바카라

  13. Pingback: Replica

  14. Pingback: SEOgine New York SEO

  15. Pingback: 카지노사이트

  16. Pingback: https://sportzdrowie.com.pl/forum/zele-masci-plastry-f15/paski-crest-pl-opinie-t408.html

  17. Pingback: KIU

  18. Pingback: Furnace Repairs

  19. Pingback: एक्स वीडियो

  20. Pingback: San Diego Criminal Lawyer BJW Law

  21. Pingback: winnipeg dentists

  22. Pingback: auto generated contents

  23. Pingback: Corona sollution

  24. Pingback: yourfishguide.com mahi mahi fish

  25. Pingback: pengeluaran hk hari ini tercepat

  26. Pingback: cum faci

  27. Pingback: milton keynes to stansted airport taxi

  28. Pingback: 카지노사이트

  29. Pingback: 먹튀검증-776

  30. Pingback: cannabis strains for sale

  31. Pingback: cute bulldog puppies for sale in canada

  32. Pingback: attivissimo.info

  33. Pingback: fish Tank Heater yourfishguide.com

  34. Pingback: digital marketing agency Hong Kong

  35. Pingback: knockoff tag heuer men

  36. Pingback: so de

  37. Pingback: 메이저놀이터

  38. Pingback: video transitions blender

  39. Pingback: ed pills for sale

  40. Pingback: http://droga5.net/

  41. Pingback: bitcoin evolution review

  42. Pingback: bitcoin evolution

  43. Pingback: Kimber Firearms for Sale

  44. Pingback: Glock firearms for sale

  45. Pingback: orangeville real estate agents

  46. Pingback: cialistodo.com

Comments are closed.