【mackler】电脑mod完全教程

if 条件 then
操作
end
这种也是可以的,也就是条件不成立直接不做操作了

——来自 MCLive


楼主 maple_in_thu  发布于 2014-10-13 19:00:00 +0800 CST  
当然还有多重选择,虽然else if分开写也行,不过lua是支持elseif连起来写的

——来自 MCLive


楼主 maple_in_thu  发布于 2014-10-13 19:02:00 +0800 CST  
分开写会累觉不爱的,最后要补上一堆end
连起来写只要一个end

——来自 MCLive


楼主 maple_in_thu  发布于 2014-10-13 19:07:00 +0800 CST  
介绍一个概念,代码块
如图,每个框起来的部分都是一个代码块,一个代码块是有一定的独立性的,当然整个程序也可以算一个代码块

——来自 MCLive


楼主 maple_in_thu  发布于 2014-10-13 19:11:00 +0800 CST  
我们甚至可以用一对do和end,手动定义一个代码块
那么代码块的作用是什么呢,和我们下面说到的一个概念有关

——来自 MCLive


楼主 maple_in_thu  发布于 2014-10-13 19:13:00 +0800 CST  
看这段代码,首先给变量a赋值1,然后输出了a的值
接着手动限定了一个代码块,然后输出a的值
再接下来的语句可能是大家没见过的
local a=2
这里是定义了一个局部变量a
接着继续输出了a
之后我们又指定了一个更内部的代码块,并且输出a
最后我们在代码块外面又输出了一次a

——来自 MCLive


楼主 maple_in_thu  发布于 2014-10-13 20:37:00 +0800 CST  
我们看最后输出的结果,第三个和第四个是2,其他是1
第三个和第四个出现的位置是在local a=2之后,代码块之内(包括子代码块)
这就是我们的局部变量
在lua中,全局变量是不用声明的,但是局部变量是需要声明的,用local来声明,可以赋值也可以不赋值。局部变量的作用范围就是所在的代码块内部。
这个设定的作用是为了保护变量,试想如果你的代码中用的全局变量被其他地方的代码修改了,那会混乱的

——来自 MCLive


楼主 maple_in_thu  发布于 2014-10-13 20:51:00 +0800 CST  
刚刚说了if else结构,叫做分支语句
下面说另一种有用的结构,叫循环语句
循环语句有三种
这里是第一种while do end
当条件成立,则进入循环体,否则退出循环
这段代码会在屏幕上输出10一直到1

——来自 MCLive


楼主 maple_in_thu  发布于 2014-10-14 00:02:00 +0800 CST  
另一种是repeat until
这种结构的条件是放在until后面的,条件成立则退出循环
和while的区别在于repeat循环会无视条件先进入循环体执行一次,而while循环如果一开始条件就不成立,则不会进入循环体
另外,while的条件成立是进入循环,until的条件成立是退出循环

——来自 MCLive


楼主 maple_in_thu  发布于 2014-10-14 00:10:00 +0800 CST  
最后一种是for循环
这里是for循环的第一种形式
这段代码等价于
i=0
while i<10
print(i)
i=i+2
end
最后一个参数2如果省略,则默认是1,写成
for i=0,10 do

——来自 MCLive


楼主 maple_in_thu  发布于 2014-10-14 00:15:00 +0800 CST  
这是for循环的第二种形式
一般是针对table的遍历的
这里的ipairs(table)是一个内建的函数,返回值是一个函数
这个函数的作用是帮助for语句找到遍历的下一项
这里得到的i和v分别是索引和值
i=1,v="lua"
i=2,v=100
i=3,v=false
ipairs不会遍历到键值,所以这样遍历不会出现i="op",v="mackler"
有另一个方法叫pairs,这种方法会包括i="op",v=mackler"

——来自 MCLive


楼主 maple_in_thu  发布于 2014-10-14 00:35:00 +0800 CST  
这个代码相当于这样一个一段代码
pairs(t)返回值是一个函数,赋值给变量n
n(t)可以获得t的第一个元素的index和value
接着只要用上一个元素index就可以通过n(t,index)获得下一个元素的index和value,所以n其实就是一个根据当前元素寻找下一个元素的函数。所以这个函数通常被称为next函数,或者迭代器

——来自 MCLive


楼主 maple_in_thu  发布于 2014-10-14 00:38:00 +0800 CST  
lua语言基本语法最后一个部分,就是函数了
函数的定义如图所示
function 函数名称(参数列表)
函数主体
end

——来自 MCLive


楼主 maple_in_thu  发布于 2014-10-14 00:40:00 +0800 CST  
函数是现代编程语言设计的一个重要思想,分治思想。
就是把一个大的问题分为若干个子问题,再把各个子问题分为若干个更小的问题。最后逐个解决。
图中的代码就定义了一个函数,我们传递一个数字进去,这个函数会算出它的平方并告诉我们

——来自 MCLive


楼主 maple_in_thu  发布于 2014-10-14 00:43:00 +0800 CST  
我们定义一个函数,接着就可以调用它了,用它来帮我们解决一些问题
在调用的时候,可以不用考虑它内部是如何实现的,而把重点放到我们要解决的问题上
例如我们在调用print函数的时候,也不用考虑它内部是怎么做的,只要知道它能把我们传递进去的值显示到屏幕上即可。

——来自 MCLive


楼主 maple_in_thu  发布于 2014-10-14 00:46:00 +0800 CST  
函数不仅可以被外面调用,还能自己调用自己
比如计算斐波那契数列的函数,输入n,返回第n个斐波那契数
我们知道fibo(n)=fibo(n-1)+fibo(n-2)还知道fibo(1)和fibo(2)是1,因此我们写出如图的代码。
就可以计算任意fibo数了(虽然不是一个高效的算法)

——来自 MCLive


楼主 maple_in_thu  发布于 2014-10-14 00:50:00 +0800 CST  
抱歉,上一楼的代码if语句少写了一个end
我们通过函数的递归调用,就可以非常便捷地得到我们要的结果。有了这个函数,我们在别的代码中用到了斐波那契数,就不用考虑如何得到了,直接调用这个函数即可,降低了思维的成本。

——来自 MCLive


楼主 maple_in_thu  发布于 2014-10-14 00:53:00 +0800 CST  
前面说过,函数也是变量值,可以赋值给一个变量,赋值之后,我们也可以通过变量来执行函数,如图,我们把fibo函数赋值给f,用f(10)就可以得到第十个斐波那契数

——来自 MCLive


楼主 maple_in_thu  发布于 2014-10-14 00:55:00 +0800 CST  
其实函数名本身就是变量名
如果你执行如下代码,你会发现fibo的值的类型是function

——来自 MCLive


楼主 maple_in_thu  发布于 2014-10-14 00:59:00 +0800 CST  
所以,像这样定义函数也是可以的

——来自 MCLive


楼主 maple_in_thu  发布于 2014-10-14 01:00:00 +0800 CST  

楼主:maple_in_thu

字数:24301

发表时间:2014-10-12 21:33:00 +0800 CST

更新时间:2016-03-15 11:34:57 +0800 CST

评论数:395条评论

帖子来源:百度贴吧  访问原帖

 

热门帖子

随机列表

大家在看