序
楼主是一个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 = 100
print(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 = 10
print(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..b
print(c) -- helloworld
c. 类型转换
有时候我们需要将数字类型(number)转化为字符串类型(string),这时候我们可以用tostring()这个函数来实现
a = 100
b = tostring(a)
type(a) -- number a的类型不会发生变化
type(b) -- string
当我们连接一个字符串和数字的时候,系统会隐示(理解为默默的,偷偷的就好)的将number类型转换成string类型。
a = 100
b = "i have "
c = b..a
type(c) --string
当然我们也会将一个字符串转换成数字类型,这时候我们可以用tonumber()函数来完成,如
a = "100"
b = tonumber(a)
print(b) --100
type(a) --string
type(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来声明一个块,块中的每一行就是一个组块。
do
local a = 100
print(a) --输出100
end
print(a) -- 输出nil