lua——函数

1,使用函数时必须带圆括号,除非函数只有一个参数,且此参数是字面字符串或者table构造式。

2,lua为面向对象式的调用提供了一种特殊的语法-冒号操作符。o:foo(x)==o.foo(o,x);

3,无论函数使用lua编写的还是用c编写的,在调用它时没有任何区别。

4,lua可以返回多个结果,只需在return后面列出所有的返回值即可。

5,lua调用一个函数的返回值数量以适应不同的调用情况:

   函数调用作为一条单独语句时,lua会丢弃函数的所有返回值。

   若将函数作为表达式的一部分来调用,lua只保留函数的第一个返回值。

   当一个函数调用是一系列表达式中的最后一个元素(或仅有一个元素)时,才能获得它的所有返回值

   所谓的一系列表达式有4种情况:

   function foo2() return "a","b" end

   1,多重赋值:x,y =foo2(),20; - - x="a",y=20;

   2,实参列表:print(foo2(),1); - - >a 1

   3,table 构造式:t={foo2(),4} -- t[1]="a",t[2]=4;

   4,return语句:return foo2(); -- 这里不要加圆括号,否则只返回一个值。

6,unpack():接受一个数组作为参数,并从小标1开始返回该数组的所有元素。

7,变长参数: "..."  select 来遍历一个函数的所有变长参数。

8,具名实参:直接受一个参数,实参只有一个table构造式。

9,函数是第一类值,与其他传统的类型的值有相同的权利。

          table.sort(network,function(a,b) return (a.name>b.name) end)

10,closure 闭合函数:

11,”词法域“,一个函数写在另一个函数内部,便可以访问外部函数的局部变量的特征。

12,非全局的函数:

13,正确的尾调用:当一个函数的调用是另一个函数的最后一个动作时,该调用才算是一条尾调用。

     只有return <func>(<args>) 这样的形形式才算是一条尾调用。