函数定义在前,调用在后

如果函数只有一个实参,并且此参数是一个字面字符串或者table构造式,那么可以省略()

例如

print "hello"

unpack{1,2}

print [[ a multi

line]]

argument 与parameter对应

实参多余形参,舍弃多余的实参

少于形参,赋值为nil

和多重赋值很像

a,b=b,a,先计算右边,交换两个变量值

多重返回值

运用到了多重赋值

function f() end--无返回值,但是也等于返回nil,占有一个位置

function f1() return  "a" end --一个返回值

function f2() return "a","b" end --返回两个结果

多重返回值分为以下几种情况:

1.作为单独语句,丢弃所有返回值

例如 f2()

2.作为表达式多个元素的非最后一个元素

只保留第一个返回值

3.作为表达式最后一个元素或者仅有一个元素

获得所有返回值

而表达式分为以下几种:

1.多重赋值

x,y=f2(),"c"--x="a",y="c",只保留第一个"a"

x,y=f2()--x="a",y="b",仅有一个元素

x,y,z="c",f2()--保留全部,因为是最后一个元素

x,y=f(),"c","d"--x=nil,y="c",因为无返回值也占用一个nil

2.函数调用传入实参列表

函数调用作为最后一个实参,所有返回值传进去

print(f2()) --a b

作为非最后一个参数,保留第一个

print(f2(),"c") --a c

3.table构造式

t={f2()} --所有的参数

t={f2(),"c"} a,c

4.return语句

return f2() --返回所有

5.其他

放在一个圆括号中,迫使只返回一个结果

print(( f2() ))

f2()..1--返回a1

变长参数

但变长参数中有nil的时候可以考虑select

  1. function _test(...)
  2. local count=select("#",...)
  3. for i=,count do
  4. v=select(i,...)--注意用多重赋值只取第一个值
  5. -- print(i,count,select(i,...))
  6. print(i,v)
  7. end
  8. end
  9.  
  10. _test(,, )

具名实参

  1. function rename(arg)
  2. print(arg.old,arg.new)
  3. end
  4.  
  5. rename{old="temp.txt",new="temp1.txt"}
  6. rename({old="temp.txt",new="temp1.txt"})

lua 函数基础的更多相关文章

  1. Lua语法基础(2)--基本语法、函数

    上一篇编辑编辑着,发现,缩进出了问题.作为一个不是强迫症的人,实在是忍受不了同一级内容不同缩进方式的槽点,于是重开一篇吧.(万幸,这样的文章也只有我自己看.) 第四 基本语法 赋值语句,Lua可以对多 ...

  2. Lua函数以及闭合函数的理解

    Lua函数以及闭合函数的理解 来源 http://blog.csdn.net/mydad353193052/article/details/48731467 词法域和第一类型 在C/C++,C#或者J ...

  3. cocos2d-x 3.0 在C++中调用lua函数

    代码用的是<cocos2d-x 3.0 在lua中调用自定义类>中的代码. 在上篇的基础上进行扩充. 写lua函数 local function process_packet(user_d ...

  4. Cocos2d-x-Lua (2.x)脚本开发之 Lua语言基础

    从今天開始,往后将陆续更新Lua教程,主要是搭载Cocos2dx ,有不论什么疑惑或者不正确的地方.尽情指正.交流.探讨. 那么首先肯定是Lua语言基础的知识点.以下直接附上代码,凝视已经非常清楚.无 ...

  5. 速战速决 (3) - PHP: 函数基础, 函数参数, 函数返回值, 可变函数, 匿名函数, 闭包函数, 回调函数

    [源码下载] 速战速决 (3) - PHP: 函数基础, 函数参数, 函数返回值, 可变函数, 匿名函数, 闭包函数, 回调函数 作者:webabcd 介绍速战速决 之 PHP 函数基础 函数参数 函 ...

  6. C中调用Lua函数

    我们先来看一个简单的例子: lua_State* L = NULL; // 内部调用lua函数 double f(double x, double y) { double z; lua_getglob ...

  7. Lua函数之二

    Lua函数之二 Lua中函数的两个重要特性: 1.函数和其他类型(如number.string)一样,可以存放在变量中,也可以存放在table中,可以作为函数的参数,还可以作为函数的返回值. 2.嵌套 ...

  8. Lua函数之一

    LUA函数之一 函数声明: function foo(arguments) statements end 1.函数调用 调用函数的时候,如果参数列表为空,必须使用()表明是函数调用,例如: os.da ...

  9. 一些LUA函数(转载)

    转自http://hi.baidu.com/chevallet/item/9a3a6410c20d929198ce3363 一些LUA函数 1.assert (v [, message]) 功能:相当 ...

随机推荐

  1. hadoop的Linux操作

    初学hadoop之linux系统操作的hdfs的常用命令 Hadoop之HDFS文件操作 Hadoop fs命令详解 官网doc sudo su - hdfs:免密,以hdfs账户登陆.可操作hdfs ...

  2. Qt5学习记录:QString与int值互相转换

    1)QString转int 直接调用toInt()函数 例: QString str("100"); int tmp = str.toInt(); 或者: bool ok; QSt ...

  3. 函数指针-如何理解typedef void (*pfun)(void)

    问题: 在刚接触typedef void (*pfun)(void) 这个结构的时候,存在疑惑,为什么typedef后只有一"块"东西,而不是两"块"东西呢?那 ...

  4. hdu 2034 改革春风吹满地 多边形面积

    改革春风吹满地 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Problem ...

  5. virtualbox中的虚拟机和windows共享文件夹

    http://www.jianshu.com/p/4e3c8b06cb06 为什么要共享文件夹? 在工作的过程当中会使用到不同的软件开发环境,php的,python的,nodejs的为了隔离这些应用环 ...

  6. Android Studio 使用USB真机调试教程

    允许安装未知来源的软件 允许USB调试 设置启动方式 选择USB device 然后运行 会自动安装软件启动! 参考: https://blog.csdn.net/fubo1990/article/d ...

  7. Git 基础 - 打标签

    列出现有标签(或者使用git tag -l) $ git tag v0. v1. 如果只对 1.4.2 系列的版本感兴趣 $ git tag -l 'v1.4.2.*' v1. v1. v1. v1. ...

  8. ajax操作json的三种方式

    一. 什么是json? 1. JSON是一种轻量级的数据交换格式 2. JSON 可以将 JavaScript 对象中表示的一组数据转换为字符串,然后就可以在网络或者程序之间轻松地传递这个字符串,并在 ...

  9. $(document).ready和window.onload,细微小区别,ready是jQuery的方法,onload是window的方法

    $(document).ready和window.onload的区别 $(document).ready和window.onload都是在都是在页面加载完执行的函数,大多数情况下差别不大,但也是有区别 ...

  10. 《剑指offer》第五十五题(二叉树的深度)

    // 面试题55(一):二叉树的深度 // 题目:输入一棵二叉树的根结点,求该树的深度.从根结点到叶结点依次经过的 // 结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. //如果左右 ...