【mackler】电脑mod完全教程

下面开始学习lua语言吧,由于电脑mod内置的lua程序提供了一个非常好的试验语句的地方,学习的时候可以在这个地方练习各种语句
我在里面输入了一个a,输出了nil
由此我们引入了第一个概念,变量
变量有一个名字,有值,这里a就是变量的名字,nil就是变量的值,变量是没有类型的,变量的值才有类型,比如nil就是nil类型的。关于类型,下面再介绍
在lua语言中,变量不需要声明,任意一段不是关键字的字符串都可以作为变量的名称,默认的值都是nil。
在上面的例子中,我并没有声明a这个变量,只是访问了一下a这个变量,得到它的值为nil

——来自 MCLive


楼主 maple_in_thu  发布于 2014-10-13 12:59:00 +0800 CST  
变量可以看做是一个容器,我们把一个值赋给一个变量,相当于把这个值放到这个容器里。
我们可以通过"="来给变量赋值,无论这个变量原来的值是多少,或者什么类型,都无所谓,只是把一个新的类型的值赋予给了这个名字。
如图,我们用a=1这个语句,就可以把a的值从nil类型的nil变成了number类型的1。

——来自 MCLive


楼主 maple_in_thu  发布于 2014-10-13 13:03:00 +0800 CST  
a的值变成了number类型的1之后,我依然可以重新给a复制,用a="ComputerCraft"把a的值变成string类型的"ComputerCraft"
也就是说,a是没有类型限制的,只是一个容器,我们访问这个容器就可以取出里面的内容。内容是有类型的,但是容器本身是不分类型的。

——来自 MCLive


楼主 maple_in_thu  发布于 2014-10-13 13:05:00 +0800 CST  
lua中有5种类型的值。
nil类型就是指空的,什么也没有,这个类型也只有一个值,就是nil
boolean类型是一个逻辑类型,只有2个取值,true和false,表示真假
number类型就是我们常用的数字类型了,不区分整数小数,统统是number类型,包括一切整数负数小数
table类型是一个非常强大而有用的类型,相当于一个映射表,像上面的t={},就是定义了一个空的表。我们可以往表里放各种类型的东西,以后再说。
function类型就是所谓的函数了,比如我们第一个程序中用到的print函数,我们赋值给fun变量,fun就是一个函数类型的变量了。这个也以后再说

——来自 MCLive


楼主 maple_in_thu  发布于 2014-10-13 13:13:00 +0800 CST  
用type函数可以获取一个变量的值的类型。可以看到上面5个变量的类型如图。

——来自 MCLive


楼主 maple_in_thu  发布于 2014-10-13 13:15:00 +0800 CST  
有了变量,有了值,我们就可以做运算了,例如a=1,a+1=2,a*a=1,这个是数字类型的运算,就是我们所学过的加减乘除等。

——来自 MCLive


楼主 maple_in_thu  发布于 2014-10-13 13:17:00 +0800 CST  
当然除了变量还有常量,1、2、3这些是number类型常量,true false是boolean类型常量,nil是nil类型常量……
boolean类型有and or not运算
A and B表示A和B都是true才得true,否则得false(如同and这个单词的意思一样)
A or B表示A或者B中至少有一个是true就返回true,否则得false
not A表示A的相反,A为true得false,A为false得true

——来自 MCLive


楼主 maple_in_thu  发布于 2014-10-13 13:23:00 +0800 CST  
字符串主要的操作一般就是拼接,是用两个点表示
A..B

——来自 MCLive


楼主 maple_in_thu  发布于 2014-10-13 15:35:00 +0800 CST  
在字符串常量或者变量前面加上"#"可以得到字符串的长度

——来自 MCLive


楼主 maple_in_thu  发布于 2014-10-13 15:37:00 +0800 CST  
字符串可以提取它的子串,这个是由LUA内建的string API完成的,关于API以后再说,说一些具体的函数
string.sub(A,a,b)
可以截取A字符串从第a个字符到第b个字符形成的子串
a和b如果是正数就是从左往右第几个,如果是负数就是从右往左第几个
大家可以根据图片自己感受和练习一下
string.lower(A)
是把A中所有大写字母都转换为小写字母
string.upper(A)
转换为大写

——来自 MCLive


楼主 maple_in_thu  发布于 2014-10-13 15:45:00 +0800 CST  
此外还有一个非常有用的string API的函数
如图的例子:string.format("number is %d",a)
第一个参数是一个字符串,称为格式化字符串
最终的输出会把其中%d会替换成后面参数中的变量a的值100,从而输出了number is 100。
格式化字符串中还有其他一些转换。
%c - 接受一个数字, 并将其转化为ASCII码表中对应的字符
%d, %i - 接受一个数字并将其转化为有符号的整数格式
%o - 接受一个数字并将其转化为八进制数格式
%u - 接受一个数字并将其转化为无符号整数格式
%x - 接受一个数字并将其转化为十六进制数格式, 使用小写字母
%X - 接受一个数字并将其转化为十六进制数格式, 使用大写字母
%e - 接受一个数字并将其转化为科学记数法格式, 使用小写字母e
%E - 接受一个数字并将其转化为科学记数法格式, 使用大写字母E
%f - 接受一个数字并将其转化为浮点数格式
%g(%G) - 接受一个数字并将其转化为%e(%E, 对应%G)及%f中较短的一种格式
%q - 接受一个字符串并将其转化为可安全被Lua编译器读入的格式
%s - 接受一个字符串并按照给定的参数格式化该字符串

——来自 MCLive


楼主 maple_in_thu  发布于 2014-10-13 15:50:00 +0800 CST  
还有一种方法是用tostring来转换a,再用..连接起来。我更喜欢这种方法。

——来自 MCLive


楼主 maple_in_thu  发布于 2014-10-13 15:51:00 +0800 CST  
接下来说说table类型,table类型中存储的是一对一对的键和值
例如图中,name就是键,mackler就是值
我们可以用这种方式来定义table里面的键和值

——来自 MCLive


楼主 maple_in_thu  发布于 2014-10-13 15:54:00 +0800 CST  
也可以先定义一个空的table
t={}
然后再定义里面某个键的值
t.name="mackler"

——来自 MCLive


楼主 maple_in_thu  发布于 2014-10-13 15:58:00 +0800 CST  
甚至我们可以不需要键,直接存放一些内容到table里面,数据类型也不需要统一,可以有五种数据类型中的任意类型混合。
甚至可以在table里面存放table

——来自 MCLive


楼主 maple_in_thu  发布于 2014-10-13 16:00:00 +0800 CST  
没有键的值可以用索引来访问,索引是根据添加顺序决定的。

——来自 MCLive


楼主 maple_in_thu  发布于 2014-10-13 16:01:00 +0800 CST  
table是可以混合存储(键=值)和列表的,同时数据类型也可以随意混合。如图,t中有两个列表元素,"mackler"和"op",数据类型是字符串,也有一个level键,值是数字11
table也可以用#来获取列表的数量,但是不包括键值中的数量,仅仅包括列表中的元素数量。

——来自 MCLive


楼主 maple_in_thu  发布于 2014-10-13 18:12:00 +0800 CST  
刚刚介绍了变量和类型,函数类型一会儿再说。
下面开始说一说语句了,我们打开存档里面computer目录下对应id的电脑,找到里面我们之前编辑的test,没有就新建一个。
替代电脑mod里面写代码(太麻烦了,而且非常不流畅)
我们在这里写了,然后直接在游戏里对应电脑的终端输入test就可以了

——来自 MCLive


楼主 maple_in_thu  发布于 2014-10-13 18:19:00 +0800 CST  
程序其实也就是把赋值、运算等各种语句按照顺序组合起来,此外还加上一些语句结构,这里先介绍第一种
if 条件 then
操作一
else
操作二
end
这里条件如果是boolean类型,如果值是true则执行操作一,为false则执行操作二
如果是nil类型,则执行操作二
如果是其他类型,则执行操作一

——来自 MCLive


楼主 maple_in_thu  发布于 2014-10-13 18:53:00 +0800 CST  
所以即使条件是0,因为是number类型,仍然执行操作一
这个是一个非常重要的运用,后面会提到,lua语言的参数传递也是很松散的,没有传递到的变量值为nil,值为nil就相当于不存在
用if 变量 then 其实是可以判断一个变量是不是存在的(boolean型除外,其他类型无论值为多少)

——来自 MCLive


楼主 maple_in_thu  发布于 2014-10-13 18:58:00 +0800 CST  

楼主:maple_in_thu

字数:24301

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

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

评论数:395条评论

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

 

热门帖子

随机列表

大家在看