【Lua基础】Lua基本用法

原创 2015年11月20日 11:46:42

<pre name="code" class="plain">----------------注释方式-----------------------
-- 单行注释

--[[
多行注释
]]

---------------基本数据类型---------------------


-- nil 空值
-- boolean bool类型
-- number 数字类型
-- string 字符串
-- table 表
-- function 函数

---------------变量的定义-----------------------

-- 定义全局变量
Global = 10
print(Global)


-- 定义局部变量
local x = 1
print(x)


-- 变量的默认值为nil
local c 
print(c)  -- 输出结果为nil


-- 定义变量,申请内存,变量是对这块内存的引用
-- 当这块内存没有被引用时,该内存会被回收
a = 10

c = a


print(c)  -- 值为10

-- 同时赋值多个变量
q,w,e,r = 1,2,3,4

---------------输出---------------------------

-- print相当于WriteLine,自带回车
print("换行的输出")  

-- io.write相当于Write,不带回车
io.write("不换行的输出")


---------------输入---------------------------
-- 在终端中输入: lua  文件路径   (回车运行)
print("请输入一个值")
n = io.read()
print(n)

---------------转义字符------------------------
print("\n表示换行")
print("\"\"") --  斜杠\取消双引号的意义,作为普通字符输出


---------------字符串操作------------------------
-- 字符串可以与数字相加,输出20
print("10" + 10)

-- ..字符串拼接符
print("name:".."LC")
print("LC age "..30)

myString = "88"
myNumber = 10

myNumber = tonumber(myString)
print(myNumber) -- 打印88

myString = tostring(2015)
print(myString) -- 打印2015

---------------关系运算符------------------------
-- > < >= <= == ~=
print( 18 ~= 19)

---------------if语句---------------------------
--【第一种】
if 19 > 18 then
	print("是的,19大于18")
end


--【第二种】
if 19 < 18 then
	print("并不输出哦")
else
	print("是的,怎么可能小于18")
end


--【第三种】
if 18 < 19 then
	print("yes")
elseif 10 > 9 then
	print("10>9")
else 
	print("default")
end


-- 除了nil和false,其他的值都为真,包括0
temp = 1997
if temp then
	print("判断")
	print(temp)
end

---------------逻辑运算符-------------------------

--  and 相当于C#中的  &&
--  or  相当于C#中的  ||
--  not 相当于C#中的  !

---------------逻辑运算符 and --------------------

-- 参与判断的两个变量,【都为假】的时候返回【前者】
-- 因为只要有一个变量为假就不需要继续判断,所以返回前者
print(nil and false) -- 输出nil
print(false and nil) -- 输出false


-- 参与判断的两个变量,【都为真】的时候,返回【后者】
-- 因为需要两个变量都为真才为真,所以无论多少变量,都需要判断到最后一个,所以返回后者
print(18 and 19)     -- 输出19
print(20 and 21)     -- 输出21


-- 参与判断的两个变量,一真一假的时候,返回【假的值】
print(10 and nil)    -- 输出nil
print(nil and 18)    -- 输出nil

--【总结:不管什么情况,都会返回那个能结束当前判断的变量】

---------------逻辑运算符 or ----------------------

print(99 or 100) -- 输出99
--【总结:不管什么情况,都会返回那个能结束当前判断的变量】


-----------------循环-----------------------------

-- while循环
temp = 8
while 18 > temp do
	temp = temp + 1
	print("18大于17")
end


-- do..while循环
i = 0
repeat
	print(i)
	i = i + 1
until i >= 10

-- for循环
for j=1,-10,-1 do
	print(j)
end

-- 实心菱形
for y=4,-4,-1 do
	for x=-4,4,1 do
		if(math.abs(x) + math.abs(y)  <= 4) then
			io.write("*")
			else
				io.write(" ")
		end
	end
	print("");
end

-----------------菱形------------------------------
--[[
*********
**** ****
***   ***
**     **
*       *
**     **
***   ***
**** ****
*********
]]
n =5

for i=n - 1,-(n - 1), -1 do
	for j=-(n - 1),(n - 1), 1 do
		if math.abs(i) + math.abs(j) >= n - 1 then
			io.write("*")
		else
			io.write(" ")
		end
	end
	print()
end

--第198行, >= 改成<=就是空心菱形



---------------------function---------------------

function Add1(a,b)
	return a + b
end


print(Add1(10,90))


--  方法参数可以传递任意个
p = function (a,b)
	print(a)
	print(b)
end

print(p(12))


-- 可以同时返回多个值,代替了C#中out参数
func = function ( )
	return 1,2,3,4
end
a,b,c,d = func();
print(d)<pre name="code" class="plain">--表类型,类似数组,实为键值对
t = {}
t[0] = 101
t[1] = 1
t[2] = 100
for i=0,2 do
	print(t[i])
end

--键值对元素要用逗号隔开
t = 
{
	100,
	age = 80,
	xiaoyu = {sex = women, age = 10,200},
	101
}
print(t[0]) --nil
print(t[1]) --100   索引从1开始
--通过key取value方法
print(t["age"])
print(t.age)
print(t["xiaoyu"].age)
print(t["xiaoyu"]["age"])
print(t["xiaoyu"][1]) -- 输出200,说明没赋键值的默认从1开始

xiaoyu = 
{
	age,
	grow = function(self)
	    --传入参数self代替this
		self.age = self.age + 1
	end
}
xiaoyu.age = 18
--模拟面向对象传参赋值
xiaoyu.grow(xiaoyu)
--第二种方式
--那个表调用函数,self就被赋值为那个表
xiaoyu:grow()
print(xiaoyu.age)

t = 
{
	1,3,5,
	name = "xiaoyu",
	age = 18,
	10
}



--求数组长度,结果为4 说明计算长度只能算索引为整数的成员
print(#(t)) 

--遍历表索引为整数的成员
for i,v in ipairs(t) do
	print(i,v)
end
--遍历所有成员  但是先后顺序为先输出整数成员再输出其他
for k,v in pairs(t) do
	print(k,v)
end

--将表进行冒泡排序
for i=1,#(t)-1 do
	for j=i+1,#(t) do
		if t[i] < t[j] then
			t[i] = t[i] + t[j]
			t[j] = t[i] - t[j]
			t[i] = t[i] - t[j]
			end
	end
end

for i=1,#(t) do
	print(t[i])
end


Person = 
{
	age,
	height,
	eat = function ( food )
		print("吃"..food)
	end,
	--手写方法创建子对象
	new = function ( self )
		obj = {}
		setmetatable(obj,{__index = self})
		return obj
	end
}

-- xiaoyu = Person:new()
-- xiaoyu.eat("meat")
-- LSL = Person:new()
-- LSL.lu = function (  )
-- 	print("...")
-- end

xiaoyu = 
{
	huazhuang = function (  )
		print("huazhuang")
	end
}

--表继承
setmetatable(xiaoyu,{__index = Person})
xiaoyu.age = 18
print(xiaoyu.age)
xiaoyu.eat("eat")






                    
版权声明:本文为博主原创文章,未经博主允许不得转载。

Lua程序设计笔记一: 基础用法/类型与值

最近公司要做游戏,就把我拉壮丁上了前线,没有办法,人手不足,要使用C++/Lua去做一些事情,项目又赶的很紧,很郁闷。。。在出来完app那边的开发工作之后,我就开始吃用cocos2d-x来做游戏了,-...

Lua基础 基本介绍

1. Lua 命名规则 跟C语言一样,有字母数字下划线3个元素组合,不能以数字开头,下面这些命名都是合法的 i,  j,    i10,     _ij,      aSomewhatLongNa...

lua基础——基本语法

lua基础--基础语法

lua基本语法

  • 2014年11月26日 20:46
  • 61KB
  • 下载

Lua C API 的正确用法【written by 云风】

刚学LUA,有点迷糊,找个文章看看,才知道,把lua嵌入到C里面,做的完美也不是件容易的事。文章,地址http://blog.codingnow.com/2015/05/lua_c_api.html ...
  • unsv29
  • unsv29
  • 2015年11月23日 14:18
  • 844

lua中关于string标准库的用法一

经过2个星期的休息,我又归来了,现在和大家讨论下如何使用string这个标准库的一些函数,及其解释下其作用。代码依然是利用luaedit调试。好了让我们开始今天我的心得吧!            第...
  • xueyunf
  • xueyunf
  • 2012年08月12日 18:46
  • 2931

class() 高级用法 --cocos2dx- lua

在quick-cocos2dx里, 通过class() 函数进行类的定义 下面贴出quick-cocos2d-x-2.2.1-rc 里 class()的源码   function cl...

Lua函数的几种用法详解

一、lua函数 在面向对象语言中函数是一组一起执行任务的语句。可以把代码放到独立的函数中。怎么划分代码功能之间的不同,但在逻辑上划分通常是让每个函数执行特定的任务。在Lua中,函数是作为"第一类值"来...

Lua编程(八)协同程序的高级用法——生产者-消费者问题

这个问题是比较经典的啦,基本所有语言的多线程都会涉及到,但是没想到Lua的这个这么复杂     看了好长时间才算看明白,先上个逻辑图:        开始时调用消费者,当消费者需要值时,再调用...

cocos2d-x与lua用法整理

Cocos2d-x 2.20以上版本没有了创建模板,创建的方式改用了Python创建,方法如下: python create_project.py -project HelloWorld -pack...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【Lua基础】Lua基本用法
举报原因:
原因补充:

(最多只允许输入30个字)