基础补充笔记

来源:互联网 发布:台湾 大陆电视剧 知乎 编辑:程序博客网 时间:2024/06/06 09:47

对于有多个返回值的函数,不一定所有情况下都能返回多个值。

先来看这样一种特别的情况,仍然是刚刚的mutou函数,我们这样调用:

  1. local a, b, c = "first", mutou("木", 25);
  2. print(a);
  3. print(b);
  4. print(c);

输出结果如下:

[LUA-print] first

[LUA-print] 木

[LUA-print] 25

 

没错,Lua的赋值语句是支持逗号表达式的(也就是用多个值给多个变量赋值),排在前面的值自然就优先赋给变量,所以变量a的值就是”first”。

不过,这不是重点~(小若:那你还说个毛线啊!)

 

重点是,我们把顺序调换一下,如下:

  1. local a, b, c =  mutou("木", 25), "first";
  2. print(a);
  3. print(b);
  4. print(c);

输出结果会出乎大家的意料:

[LUA-print] 木

[LUA-print] first

[LUA-print] nil

 

没错,mutou函数的返回值变成只有一个了,这就是函数的特点之一:如果函数的调用不是在表达式的最后一个元素,则,最多只返回一个值。

 

 

 

 

 

 

多重返回值的特点2——强制返回一个值

某些情况下,我们可能会对于一个函数感到厌烦,没错,为什么你总是返回多个值?!

 

如果想让某个函数强制只返回一个值,可以这么做:

 

  1. local a, b = (mutou("木", 25));
  2. print(a);
  3. print(b);

 

输入结果如下:

[LUA-print] 木

[LUA-print] nil

 

我们只需要在函数调用时,把函数调用放在括号中就可以了。

 

 

 

 

 

 

 

2.非全局函数

又是这种看着就反人类的名词,非全局,那就是说,不是全局的函数(小若:废你个话啊!)

来看看这样的一个函数:

  1. local function mutou()
  2.    
  3. end

这就是一个非全局函数,但,这么简单的东西我可不会拿出来说~

 

这里我想介绍一个“语法糖”,上面的mutou函数,其实相当于以下的代码:

  1. local mutou;
  2. mutou = function ()
  3.    
  4. end

 

这就是我们函数的真实面貌,函数名称其实也是一个变量名而已。

所以,有时候,我们在定义函数的时候,要注意一下顺序。比如,这样的两个函数:

  1. local function mutou()
  2.     print("mutou");
  3.     return pangbai();
  4. end
  5. local function pangbai()
  6.     print("pangbai");
  7. end

mutou函数里要调用pangbai函数。

在编译的时候,mutou函数是编译不过的,因为这个时候pangbai函数未定义,换句话说,pangbai变量并不存在。

只要换一个方式就可以解决这个问题了:

  1. local mutou;
  2. local pangbai;
  3. mutou = function ()
  4.     print("mutou");
  5.     return pangbai();
  6. end
  7. pangbai = function ()
  8.     print("pangbai");
  9. end

 

0 0
原创粉丝点击