Lua学习笔记(一)

来源:互联网 发布:ubuntu 关闭图形界面 编辑:程序博客网 时间:2024/05/17 07:35

楼主是一个wower从mc开荒开始就玩了,当时还是一个高二的学生,高三要高考了整整一年基本都没有玩,只是偶尔偷偷回家玩一下。楼主是一个pvp爱好者,自从有了jjc(arena)以后基本就不打副本了(除了s4赛季 为了4+4 古头 打个太阳井,黑庙什么,之后貌似也就是贼法法牧骑那版英雄火鹰裤子),顺便说下楼主是一个法师,之前afk了一段时间,上赛季回来重新玩,目前玩法师和奶萨,竞技场里经常被x的抬不起头,后来在twitch上向大神们学习了一下,感觉抗揍多了操作也好多了。当然和一些竞技场插件有着密不可分的关系。这是国外的一个插件网站,上面有好多很好的单体,不要积分随便下载http://www.curse.com/addons/wow 。可是呢毕竟插件是别人做的,跟自己想法还是会有一定出入,所以楼主决定自学以下lua 。好啦废话不多说了,开始干活。首先我们需要下载一个lua解释器(http://www.lua.org/download.html)包含了windows、linux、macOS,安装很简单就不详述了,或者大家可以在http://wowprogramming.com/utils/weblua 这个网站上使用在线的lua解释器。第一个程序必然是Hello world! ,在lua中很简单,大家只要输入
print("hello world")

就好啦。对于lua语言来说,最后的分号可以省略。

一. 基本类型

     1. number :数字类型,包含所有数字,如十六进制数和科学记数法记数。     2. string : 字符串类型。     3. boolean :布尔类型(true or false)。     4. function :函数     5. table : 哈希表和数组的混合类型     6. thread : 线程     7. userdata :数据结构包装器    我们可以利用 type()函数来获得一个给定值的类型。

例:

a = 100print(type(a))

输入后 我们会得到答案为 number

a = "Hello world"print(type(a))

输入后我们会得到答案为 string

需要注意的当我们没有定义一个变量的时候,使用type(something) 函数会返回nil。

二. 比较运算符

 1. 等于                                                == 2. 大于                                                > 3. 小于                                                < 4. 大于等于                                             >= 5. 小于等于                                             <= 6. 不等于                                               ~=

比较结果会返回一个布尔值(true or false)。
当我们比较不同类型的变量时,如:

a = "a"b = 10print(a == b)print(a > b) --print(a < b)同理print(a >= b) --print(a <= b)同理print(a ~= b)

显然既然类型不同当然 a == b 会返回false , a ~= b 会返回true。但是 a > b 和 a >= b 会报错,”stdin:1: attempt to compare number with string” (尝试比较数字和字符串)。所以lua中不支持不同类型之间的比较。

三. 字符串的一些操作

a.字符串比较

"a" > "b"   --false"abbbc" > "abbbd"   -- false 对比每一个字符,直到出现不一样的"b" > "abbbbbb" -- true "b" > "a" 所以就不用继续比较"ab" > "a"  --true 如果字头相同,长度大的更大"a" > "A"   --true 小写字母比大写字母大

b.字符串连接

a = "hello"b = "world"c = a..bprint(c) -- helloworld

c. 类型转换

有时候我们需要将数字类型(number)转化为字符串类型(string),这时候我们可以用tostring()这个函数来实现

a = 100b = tostring(a)type(a) -- number a的类型不会发生变化type(b) -- string

当我们连接一个字符串和数字的时候,系统会隐示(理解为默默的,偷偷的就好)的将number类型转换成string类型。

a = 100b = "i have "c = b..atype(c) --string 

当然我们也会将一个字符串转换成数字类型,这时候我们可以用tonumber()函数来完成,如

a = "100"b = tonumber(a)print(b) --100type(a) --stringtype(b) --number

d.字符串类型的声明

a = "hello world" --应该避免在在引号中出现双引号,如需要出现请加上 \ 。a1 = "\"hello world\"" -- 输出"hello world"b = 'hello world' --和双引号一样,在单引号中不能出现单引号,如需出现请加上 \c = [[hello world "hello world" 'hello world']] --可以在[[]]出现任何字符

e. 字符串长度

a = " hello world "#a --输出13(包括空格的长度)string.len(a) -- 同样是13

四. 块和组块

首先说明一下全局变量和局部变量的差别,目前我们声明的变量都属于全局变量,也就是说在这个lua文件中都是有效的。有时候我们不想让一些变量出现在整个文件中,这时候我们就要用到局部变量,在lua中用local关键字来声明一个局部变量

local a = 10

既然是局部变量,那这个a的作用范围是什么呢? lua默认每一行为一个块,也就是说过了这一行 a的值就不存在了。大家可以试试print(a),答案是nil。因为已经出了局部变量a的作用域了。那我们如何扩大一个块的行数呢? lua 中我们用 do….end来声明一个块,块中的每一行就是一个组块。

dolocal a = 100print(a) --输出100endprint(a) -- 输出nil
0 0
原创粉丝点击