【mackler】电脑mod完全教程
介绍一个概念,代码块
如图,每个框起来的部分都是一个代码块,一个代码块是有一定的独立性的,当然整个程序也可以算一个代码块
——来自 MCLive
如图,每个框起来的部分都是一个代码块,一个代码块是有一定的独立性的,当然整个程序也可以算一个代码块
——来自 MCLive
我们甚至可以用一对do和end,手动定义一个代码块
那么代码块的作用是什么呢,和我们下面说到的一个概念有关
——来自 MCLive
那么代码块的作用是什么呢,和我们下面说到的一个概念有关
——来自 MCLive
看这段代码,首先给变量a赋值1,然后输出了a的值
接着手动限定了一个代码块,然后输出a的值
再接下来的语句可能是大家没见过的
local a=2
这里是定义了一个局部变量a
接着继续输出了a
之后我们又指定了一个更内部的代码块,并且输出a
最后我们在代码块外面又输出了一次a
——来自 MCLive
接着手动限定了一个代码块,然后输出a的值
再接下来的语句可能是大家没见过的
local a=2
这里是定义了一个局部变量a
接着继续输出了a
之后我们又指定了一个更内部的代码块,并且输出a
最后我们在代码块外面又输出了一次a
——来自 MCLive
我们看最后输出的结果,第三个和第四个是2,其他是1
第三个和第四个出现的位置是在local a=2之后,代码块之内(包括子代码块)
这就是我们的局部变量
在lua中,全局变量是不用声明的,但是局部变量是需要声明的,用local来声明,可以赋值也可以不赋值。局部变量的作用范围就是所在的代码块内部。
这个设定的作用是为了保护变量,试想如果你的代码中用的全局变量被其他地方的代码修改了,那会混乱的
——来自 MCLive
第三个和第四个出现的位置是在local a=2之后,代码块之内(包括子代码块)
这就是我们的局部变量
在lua中,全局变量是不用声明的,但是局部变量是需要声明的,用local来声明,可以赋值也可以不赋值。局部变量的作用范围就是所在的代码块内部。
这个设定的作用是为了保护变量,试想如果你的代码中用的全局变量被其他地方的代码修改了,那会混乱的
——来自 MCLive
刚刚说了if else结构,叫做分支语句
下面说另一种有用的结构,叫循环语句
循环语句有三种
这里是第一种while do end
当条件成立,则进入循环体,否则退出循环
这段代码会在屏幕上输出10一直到1
——来自 MCLive
下面说另一种有用的结构,叫循环语句
循环语句有三种
这里是第一种while do end
当条件成立,则进入循环体,否则退出循环
这段代码会在屏幕上输出10一直到1
——来自 MCLive
另一种是repeat until
这种结构的条件是放在until后面的,条件成立则退出循环
和while的区别在于repeat循环会无视条件先进入循环体执行一次,而while循环如果一开始条件就不成立,则不会进入循环体
另外,while的条件成立是进入循环,until的条件成立是退出循环
——来自 MCLive
这种结构的条件是放在until后面的,条件成立则退出循环
和while的区别在于repeat循环会无视条件先进入循环体执行一次,而while循环如果一开始条件就不成立,则不会进入循环体
另外,while的条件成立是进入循环,until的条件成立是退出循环
——来自 MCLive
最后一种是for循环
这里是for循环的第一种形式
这段代码等价于
i=0
while i<10
print(i)
i=i+2
end
最后一个参数2如果省略,则默认是1,写成
for i=0,10 do
——来自 MCLive
这里是for循环的第一种形式
这段代码等价于
i=0
while i<10
print(i)
i=i+2
end
最后一个参数2如果省略,则默认是1,写成
for i=0,10 do
——来自 MCLive
这是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
一般是针对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
这个代码相当于这样一个一段代码
pairs(t)返回值是一个函数,赋值给变量n
n(t)可以获得t的第一个元素的index和value
接着只要用上一个元素index就可以通过n(t,index)获得下一个元素的index和value,所以n其实就是一个根据当前元素寻找下一个元素的函数。所以这个函数通常被称为next函数,或者迭代器
——来自 MCLive
pairs(t)返回值是一个函数,赋值给变量n
n(t)可以获得t的第一个元素的index和value
接着只要用上一个元素index就可以通过n(t,index)获得下一个元素的index和value,所以n其实就是一个根据当前元素寻找下一个元素的函数。所以这个函数通常被称为next函数,或者迭代器
——来自 MCLive
lua语言基本语法最后一个部分,就是函数了
函数的定义如图所示
function 函数名称(参数列表)
函数主体
end
——来自 MCLive
函数的定义如图所示
function 函数名称(参数列表)
函数主体
end
——来自 MCLive
函数是现代编程语言设计的一个重要思想,分治思想。
就是把一个大的问题分为若干个子问题,再把各个子问题分为若干个更小的问题。最后逐个解决。
图中的代码就定义了一个函数,我们传递一个数字进去,这个函数会算出它的平方并告诉我们
——来自 MCLive
就是把一个大的问题分为若干个子问题,再把各个子问题分为若干个更小的问题。最后逐个解决。
图中的代码就定义了一个函数,我们传递一个数字进去,这个函数会算出它的平方并告诉我们
——来自 MCLive
我们定义一个函数,接着就可以调用它了,用它来帮我们解决一些问题
在调用的时候,可以不用考虑它内部是如何实现的,而把重点放到我们要解决的问题上
例如我们在调用print函数的时候,也不用考虑它内部是怎么做的,只要知道它能把我们传递进去的值显示到屏幕上即可。
——来自 MCLive
在调用的时候,可以不用考虑它内部是如何实现的,而把重点放到我们要解决的问题上
例如我们在调用print函数的时候,也不用考虑它内部是怎么做的,只要知道它能把我们传递进去的值显示到屏幕上即可。
——来自 MCLive
函数不仅可以被外面调用,还能自己调用自己
比如计算斐波那契数列的函数,输入n,返回第n个斐波那契数
我们知道fibo(n)=fibo(n-1)+fibo(n-2)还知道fibo(1)和fibo(2)是1,因此我们写出如图的代码。
就可以计算任意fibo数了(虽然不是一个高效的算法)
——来自 MCLive
比如计算斐波那契数列的函数,输入n,返回第n个斐波那契数
我们知道fibo(n)=fibo(n-1)+fibo(n-2)还知道fibo(1)和fibo(2)是1,因此我们写出如图的代码。
就可以计算任意fibo数了(虽然不是一个高效的算法)
——来自 MCLive
抱歉,上一楼的代码if语句少写了一个end
我们通过函数的递归调用,就可以非常便捷地得到我们要的结果。有了这个函数,我们在别的代码中用到了斐波那契数,就不用考虑如何得到了,直接调用这个函数即可,降低了思维的成本。
——来自 MCLive
我们通过函数的递归调用,就可以非常便捷地得到我们要的结果。有了这个函数,我们在别的代码中用到了斐波那契数,就不用考虑如何得到了,直接调用这个函数即可,降低了思维的成本。
——来自 MCLive
前面说过,函数也是变量值,可以赋值给一个变量,赋值之后,我们也可以通过变量来执行函数,如图,我们把fibo函数赋值给f,用f(10)就可以得到第十个斐波那契数
——来自 MCLive
——来自 MCLive
楼主:maple_in_thu
字数:24301字
发表时间:2014-10-12 21:33:00 +0800 CST
更新时间:2016-03-15 11:34:57 +0800 CST
评论数:395条评论
帖子来源:百度贴吧 访问原帖