博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Lua学习笔记之函数
阅读量:5173 次
发布时间:2019-06-13

本文共 1873 字,大约阅读时间需要 6 分钟。

(与主题无关)

数字型for 的格式

exp3默认为1

for var=exp1 , exp2 , exp3  do
<执行体>
end

泛型for迭代的类型

标准库中提供了几种迭代器

io.lines() 用于迭代文件中每行pairs() 迭代table中元素ipairs() 迭代 数组 元素string.gmatch() 迭代字符串中单词

函数

多重返回值: x , y = foo()

foo()返回值就是2个值,并不是table或者其他类型。

t = { foo() } 这是再封装 成为一个table。{ “a” , “b” }

变长参数: function add ( ... )

在函数内部使用这些参数 依然使用 ... 来表示,此时,这个表达式 是一个像多重返回值一样的序列,不是table。当然,可以再包装 { ... },这也是通常函数内遍历变长参数的方式。

function fwrite ( fmt , ... )return io.write( string.format( fmt, ...) )end

具名实参

w = Window{ x=0 , y=0 , width=300 , height=200,        title = “Lua” , background=”blue”,        border = true }

Window函数只有一个参数(当函数只有一个参数时,调用时可以去掉圆括号),并且,这个参数需要我们用table,就可以实现具名参数了。

深入函数

第一类值:函数(这个函数本身,而非其返回值,其实现我们可以理解为类似于C中的函数指针被存储)可以存储到变量中,或者table中,可以作为实参传递给其他函数,还可以作为作为其他函数的返回值。词法域:类似于JS中的闭包。

函数名,一个拥有某函数的变量。函数与所有其他值一样都是匿名的。

foo = function( x )  return 2*x  endtable.sort ( onetable , function( a , b )                             return (a.name > b.name)                         end )

对一些函数的访问,想要建立一个安全的运行环境,比如,限制一个程序访问文件:

do    local  oldOpen = io.open    local   access_OK = function ( filename , mode )                        
<检查访问权限>
end io.open = function ( filename , mode ) if access_OK( filename , mode ) then return oldOpen( filename , mode ) else return nil , “access denied” end endend

正确的尾调用

function f ( x )  return g( x )  end  ---yesfunction f ( x )   g( x )  end  ---not

“尾调用”不需要消耗任何栈信息,即,当g返回时,程序执行点将直接返回 调用f的地方。可以理解为,在f返回并调用g的时候,f 已经被清栈,之后接着调用g,g结束后自然栈调用信息直接到了,f的调用者的地方。

“尾调用” return [func] ( [args] )
非常适合状态机一类程序。

截取一段例子:

funciton room1 ()    local move = io.read()    if  move == “south” then return room3()    elseif  move == “east” then return room2()    else        print( “invalid move” )        return room1()  --stay in the same room    endend

转载于:https://www.cnblogs.com/appleegig/p/3902251.html

你可能感兴趣的文章
Base on QC Automation Framework v1.0
查看>>
bzoj 3261: 最大异或和 (可持久化trie树)
查看>>
UVA 11440 Help Tomisu
查看>>
bzoj千题计划258:bzoj3123: [Sdoi2013]森林
查看>>
开博@纪念
查看>>
linux的正则表达式
查看>>
Android 中EditText 与Keyboard 引起的UI bug
查看>>
20162316刘诚昊 2016-2017-2《程序设计与数据结构》课程总结
查看>>
代理模式---动态代理之JDK
查看>>
POJ 1182 食物链
查看>>
python xml解析和生成
查看>>
MySQL MGR集群搭建
查看>>
吴恩达深度学习笔记 cousrse4 week1作业
查看>>
程序员前辈走过的路
查看>>
UBUNTU 10.04 更新源 补充
查看>>
outputcache
查看>>
pc110301QWERTYU
查看>>
go 数组
查看>>
ilspy 点击根节点后进行解析的方法
查看>>
promise原理及使用方法
查看>>