这是笔者学习《Lua中文教程》所写的笔记,So,笔记中的例子在《Lua中文教程》中都能找到。
我安装的是LuaForWindows,用的IDE是其自带的SciTE。
1.HelloWorld
哈哈。HellWorld,从C到Java再到C++第一个例子都是HelloWorld,今天照样用HelloWorld的例子打开Lua的大门。
你只要在SciTE中新建一个文件,保存文件到自己需要的目录输入一行代码:
Print(“Hello World”)--这里加不加’;’都可以
这样就可以保存了。OK,点击运行。
如果,不用IDE运行,在cmd中运行也是可以的,找到你的文件目录 prompt lua xxx.lua
就OK了。
2.输出一个数的阶乘
指定一个数,输出这个数的阶乘。
这就是一个简单的递归。
-- defindes a factorial function
function fact (n)
if n == 0 then
return 1
else
print(n)
return n * fact(n - 1)
end
end
print("enter a number:")
a = io.read("*number") --read a number
print(fact(a))
3.全局变量:全局变量不需要声明,给一个变量赋值后即创建了这个全局变量,访问一个没有初始化的变量也不会出错,只不过得到的结果是:nil。代码:test3.lua
如果你想删除一个变量,那么,需要赋值为nil,这样这个变量就好像没有使用过一样。换句话说,当且仅当一个变量不为nil时,这个变量存在。
print(b)
b = 10
print(b)
b = nil
print(b)
4.词法约定:标识符最好不要使用下划线加大写字母,因为,lua的保留字也是这样的。
保留字啥的就不说了,看了看应该没有重名的可能性。
注意:Lua是大小写敏感的。
注释:单行注释--
多行注释--[[ ]]--
类型和值
Lua是动态类型语言,变量不要类型定义。Lua中有8个基本类型分别为:nil,boolean,number,string,userdata,function,thread和table。函数type可以测试给定变量或者值的类型。
print(type("Hello world"))
print(type(10.4 * 3))
print(type(print))
print(type(type))
print(type(true))
print(type(nil))
print(type(type(x)))
print(type(a))
a = 10
print(type(a))
a = "a string"
print(type(a))
a = print --还能这么用,感觉好酷啊
a(type(a))
Nil:
Lua中的特殊类型,他只有一个值:nill,一个全局变量没有被赋值前默认值为nil,给全局变量赋nil可以删除该变量。
Boolean:
True,false
Numbers:
表示实数,Lua中没有整数。
Strings:
指字符串的序列,Lua是8位字节,所以,字符串可以包含任何数值字符,包括嵌入的0。这意味着你可以存储任意的二进制数据在一个字符串中。Lua中的字符串是不可以被修改的,你可以创建一个新的变量存放你要的字符串。
a = "one string"
b = string.gsub(a,"one","another")
print(a)
print(b)
c = "aaaabbbbcccddddeeeefffeeee"
d = string.gsub(c,"e","g")
e = string.gsub(c,"aa","A")
f = string.gsub(c,"aaa","K")
g = "--太神奇了!!!"
print(c)
print(d)
print(e)
print(f)
print(g
Lua中的字符串可以使用双引号或者单引号表示,最好使用其中的一种。String可以是一个字母也可以是一本书,Lua可以高效的处理字符串。1M的字符串在Lua中是很常见的。
运行时Lua会自动在string和numbers之间自动转换,当一个字符串使用算数操作符是,string就会被转成数字。..是Lua中的字符串连接符,当在一个数字后面写时,必须加上空格以防止被解释错。
print("10" + 1)
print("10 + 1")
--print("-5.3e - 10" * "2")--Error
--print("hello" + 1)--Error
print(10 .. 20)
管字符串和数字可以相互转化,但两者是不同的,像10 == “10”这样的比较永远是错的。如果需要显示的将string转成数字可以用函数tonumber(),如果string不是正确的数字,该函数将返回nil。tostring()函数可以将数字转成字符串。
line = io.read()
n = tonumber(line)
if n == nil then
error(line .. " is not a valid number")
else
print(n * 2)
end
a = 10
b = tostring(a)
--c = toboolean(a)
print(type(b))
Functions
函数是第一类值(和其他变量相同),意味着函数可以存储在变量中,可以作为函数的参数,也可以作为函数的返回值。
Userdata and Threads
Userdata可以将C数据存放在Lua变量中,userdata在Lua中除了赋值和相等比较外没有预定义的操作。Userdata用来描述应用程序或者使用C实现的库创建的新类型。