`
bit1129
  • 浏览: 1070076 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

[Lua语言]Lua语言入门

 
阅读更多

开发环境

 

1.Script.Net提供了Lua的开发和调试的功能,

http://www.blueantstudio.net/scriptnet/download/download.htm

2.Eclipse LUA(LDT)提供了Lua的开发和调试的功能,以及基本的代码提示

http://www.eclipse.org/koneki/ldt/#installation

 

 

注释

  1. --表示单行注释,类似Java的//
  2. --[[多行注释]], 类似Java的/**/

赋值运算

local function main() 
--[[
复制运算符: =
]]

a=1
x,y,z=1,2,3


m=3
n=4
m,n=n,m --m,n数值交换

print(a,x,y,z,m,n) --输出1  1 2 3 4 3

end main()

 

算术运算

local function main() 
--[[
1. 数值运算符+ , -,  *,  /(除法运算,浮点除法), ^(乘方运算)

]]
a = 4
b= 7
print (a+b, a-b, a*b, a/b, a^b) --输出11  -3  28  0.57142857142857  16384
end main()

 

 比较运算

local function main()
--[[
1.比较运算符:<, <=, ==, >=, >,~=
2.对于引用类型的数据,比如Table,Function或者UserObject,只有==和~=可以用,此时的==表示对象的引用一样
]]

print(1 < 2);
print(1 <= 2);

print(1 == 2);
print(1 ~= 2);

print(1 > 2);
print(1 >= 2);

print(nil ~= nil) --输出false,所以false等于false
print(false == false) --输出true
print(true == true)--输出true

a={1,2}
b={1,2}
print(a==b, a~=b)---输出false true

a=b
print(a==b, a~=b)---输出true false


end main()

 

 逻辑运算

local function main()
--[[
逻辑运算符:and, or, not
1. a and b a为false则返回a,否则返回b
2. a or b a为true返回a,否则返回b
3. 只有false和nil为false,其余值均为true
4. not a, a为false值则返回true,a为true值则返回false
]]
  print( 1 and 2) --输出2
  print(1 or 2)--输出1
  print(not nil) --输出true
  print(not false) --输出true
  print(not true) --输出false
  print(not 1) --输出false
end main()

 

 Lua语言关键字(字母排序)

and
break
do
else
elseif
end
false
for
function
if
in
local
nil
not
or
repeat
return
then
true
until
while

 

Lua语言数据类型

local function main()
a = 1;
b = "msn";
c = 1.3
d = {1, 2};
e = 1 > 2;
f = math.sin;
g = {lang="LUA"}
g.lang="Lua"

print(type(a),type(b),type(c),type(d),type(e),type(f),type(g)) --输出number string  number  table boolean function  table


--[[
还有其他类型
function  --函数类型,意思是说,Lua的每个函数都是变量
userdata --该类型用于Lua跟宿主语言打交道 
thread  --Lua没有真正的线程,不过一个函数可以分成几部分执行
]]
end main()

 

 Table变量和函数变量定义

local function main() 
 
 
--变量多重赋值
a, b, c = 1, 2, 3


--[[Table,关系表类型,可以看成是数组,也可以看成Map
1.键值可以不是数字,可以是字符串
2.数值类型不一定类型完全一样,
3.如果是以数字索引,那么从开始
]]

--[[下面的语句输出
value1  value2  value3
value1  value2  value3
nil nil nil
]]
data = {key1="value1",  key2="value2",  key3=123};
print(data.key1,data.key2,data.key3)
print(data["key1"],data["key2"],data["key3"])
print(data[0],data[1],data[2])  --不是下标语法
---------------------------------------------------------------

--[[
二维数据表
Table = {}
Table.lang = {"Java","Lua"}
]]

t={}
t.lang = {"Java", "Lua"};
print(t.lang[1], t.lang[2]); --下标从1开始,Java  Lua


--[[
函数定义
]]
function add(a, b)
  return a + b;
end
--等价于上面的函数定义
func=function(a,b)
  return  a+b;
end 

print(add(6,7)) --输出13


end main()

 

 for循环

local function main()
    --[[
    for (i=1,10) do
      print
      print
    end

    for(i=迭代初值,迭代最终值) do
      --loop body
      --each iteration, i increments by 1 by default
    end
    
     for(i=迭代初值,迭代最终值, 步幅) do
      --loop body
      --each iteration, i increments by 步幅(如果步幅为正) by default
    end
    
    ]]

    for i=1,10 do --for和do之间没有括号
      print(i) --do和end定义循环体
      print(i)
    end

    for i=1,10,3 do --for和do之间没有括号
      print(i) --do和end定义循环体,输出1,4,7,10
    end



end main()

 

Lua OOP特性之封装

local function main() 

--使用Lua的Table数据类型可以将数据和函数封装到一起,这跟Javascript的语言的对象封装特性类似
--定义Person类
Person = {};
Person.age=13;
Person.setAge=function(age)
  Person.age=age; --这里不能使用this.age=age
  end
Person.getAge=function() 
  return Person.age;--这里不能使用return this.age
  end

--调用p的getAge方法
print(Person.getAge())


end main()

 

上面的代码比较Ugly,因为自始至终都是使用Person来进行操作,是否应该有this语法,如下面的函数定义

Person.setAge=function(age)
  this.age=age; --this指向调用setAge方法的对象本身
  end

 Lua提供了self这个特殊参数,用于在函数体中引用对象本身,但是必须使用:用来声明函数?

Cat = {age=2}
function Cat:eat() --必须使用:语法?改为Cat.eat=function则报错
  print ("I am eat..I am ".. self.age.. " years old") --self类似于Java的this对象
end

function Cat:setAge()
  self.age = 10; 
end

Cat:eat(); --输出I am eat..I am 2 years old

 

Lua的OOP特性之继承

local function main()

  --定义Animal类,有两个属性和两个方法getName,getAge
  Animal={name="Unknown", age=1};

  function Animal:getName()
    return self.name;
  end

  function Animal:getAge()
    return self.age;
  end

  function Animal:setName(name)
    self.name = name;
  end

  function Animal:setAge(age)
    self.age = age;
  end

  --定义一个类Cat
  Cat={color="Yellow"};
  function Cat:getColor()
    return self.color;
  end

  --将Cat设置为Animal的子类
  setmetatable(Cat, {__index = Animal})

  --设置Cat的name和age
  Cat:setName("HelloKitty");
  Cat:setAge(11);

  --打印Cat的name,age和color
  print(Cat:getName()..'\t'..Cat:getAge()..'\t'..Cat:getColor());
end main()

  

继承实现的另一种方式是将设置元数据表操作封装到一个函数中,

 

 

 

 

Lua的OOP特性之多态(函数覆写)

 

下面的例子覆写了父类的setName方法

 

local function main()

  --定义Animal类,有两个属性和两个方法getName,getAge
  Animal={name="Unknown", age=1};

  function Animal:getName()
    return self.name;
  end

  function Animal:getAge()
    return self.age;
  end

  function Animal:setName(name)
    self.name = name;
  end

  function Animal:setAge(age)
    self.age = age;
  end

  --定义一个类Cat
  Cat={color="Yellow"};
  function Cat:getColor()
    return self.color;
  end
  function Cat:setName(name) --覆写父类的setName方法
    self.name = name .. ".Cat";
  end

  --将Cat设置为Animal的子类
  setmetatable(Cat, {__index = Animal})

  --设置Cat的name和age
  Cat:setName("HelloKitty");
  Cat:setAge(11);

  --打印Cat的name,age和color
  print(Cat:getName()..'\t'..Cat:getAge()..'\t'..Cat:getColor());



end main()

 

源代码:

 

  • 大小: 136.5 KB
分享到:
评论

相关推荐

    Lua脚本语言中文教程.pdf

    这本教程详细介绍了Lua语言的基本概念、语法结构、程序设计方法等,并通过实例引导读者逐步学习和掌握Lua语言。本书的内容仅供个人学习使用,不得用于商业用途,不得擅自复制或发布到其他网站。 在编程语言的世界里...

    Lua语言快速入门(包含安装程序和文档)

    标题“Lua语言快速入门(包含安装程序和文档)”指的是为初学者准备的关于Lua的入门教程,其中包括了安装Lua环境和学习资料。提供的文件“Lua_v5.1.4.21.exe”是Lua 5.1.4版本的安装程序,这个版本是在2008年发布的,...

    Lua 语言入门

    ### Lua 语言入门知识点详解 #### 一、Lua 语言简介 Lua 是一种轻量级的脚本语言,因其简洁高效、易于嵌入等特点而受到广泛欢迎。它最初由巴西的 Pontifícia Universidade Católica do Rio de Janeiro 大学在 ...

    LUA 脚本入门教程(WORD版)

    本资源是一个关于LUA脚本语言的入门教程,旨在帮助读者快速掌握LUA语言的基础知识和语法。该教程由Roberto Ierusalimschy编写,www.luachina.net翻译。 一、LUA语言概述 LUA是一种轻量级的脚本语言,广泛应用于...

    Lua语言(含教材和编译器(仅适合windows用户))

    总的来说,这个压缩包提供了一个全面的入门Lua语言的资源,包括理论学习和实际操作的工具,非常适合对Lua感兴趣的新手或是希望在Windows环境中使用Lua的开发者。通过系统学习和实践,你可以掌握Lua的基础知识,为...

    Lua快速入门 pdf

    本文档旨在为已有一定编程基础的学习者提供Lua语言的快速入门指南。适合希望通过快速掌握Lua的关键概念和编程模式来提升自己的程序员阅读。 #### 二、核心内容概述 本文档分为初、中、高三个阶段,每个阶段包含若干...

    Lua语言从入门到精通

    在本文中,我们将深入探讨Lua语言的基本概念、语法特性、数据类型、控制结构、函数、模块化编程等方面,帮助你从入门到精通。 一、Lua语言基础 1. 变量与数据类型:Lua支持动态类型,变量无须提前声明。其数据类型...

    Lua语法进阶,Lua入门

    Lua 语言入门需要了解 Lua 语言的基本语法和特性,包括变量、数据类型、运算符、控制结构和函数等。此外,还需要了解 Lua 语言中的元表和运算符重载,以实现自定义的逻辑。 在学习 Lua 语言时,可以从基础的语法...

    lua语言入门代码

    **lua语言入门代码** Lua是一种轻量级的脚本语言,广泛应用于游戏开发、系统配置、嵌入式设备以及各种工具脚本。它的设计目标是简洁、易读、易写,使得开发者能够快速地实现功能。这篇博文将带你走进Lua的世界,...

    《罗布乐思开发官方指南:Lua 语言编程》读书笔记模板x.pptx

    《罗布乐思开发官方指南:Lua 语言编程》读书笔记模板 本书是罗布乐思官方推出的开发指南,旨在帮助...本书尤其适合新入门的游戏开发者和教育创新者使用,旨在帮助读者学会使用 Lua 语言编程,创建游戏化教育工具。

    Lua语言中文入门教程.zip

    unity热更新 lua 方案语法基础;热更新是指在不停机的状态下对系统进行更新,例如Windows可以在不重启的状态下完成补丁的更新、Web服务器在不重启的前提下完成对数据和文件的替换等都是热更新的经典实例。

    Lua游戏脚本语言入门

    Lua游戏脚本语言入门 Lua 语言是一种轻量级的脚本语言,广泛应用于游戏开发、嵌入式系统等领域。 Lua 的语法简单,易于学习和使用,本文将对 Lua 语言的基本知识进行介绍。 一、注释 在 Lua 中,可以使用单行...

    Lua实例代码大全

    在压缩包内的文件列表中,如`quickluatour.lua`可能是Lua语言快速入门的示例,`life.lua`可能展示了Conway的生命游戏实现,`sort.lua`和`sieve.lua`可能涉及排序算法和素数筛法,`trace-calls.lua`和`trace-globals....

    Lua 5.1 中文参考手册.pdf (入门与提高)

    Lua语言支持多种命名约定,标识符由字母、数字、下划线组成,并且必须以非数字字符开头。Lua是一个大小写敏感的语言,关键字(如 and, break, do 等)不能作为名字使用。此外,下划线开头跟随一串大写字母的标识符...

    Lua中文教程.pdf

    提供脚本语言学习者一个中文文档,该文档全面讲述了Lua的基本特性和如何使用

    Lua 编程指南-Lua 编程入门教程

    ### Lua编程指南—Lua编程入门教程 #### 一、Lua简介及特点 Lua是一种轻量级的、高效的脚本语言,常被用作C语言的功能扩展。它具有以下特点: - **简洁优雅**:Lua的设计理念是简洁和优雅,这使得它的语法非常...

    30分钟lua脚本语言快速入门

    通过以上介绍,我们对Lua语言有了一个基本的认识。接下来,你可以尝试编写更复杂的程序,并深入了解Lua的高级特性,如元表(Metatable)、闭包(Closure)等。Lua的强大之处在于其简洁性和灵活性,这使得它成为了一...

Global site tag (gtag.js) - Google Analytics