16387人加入学习
(66人评价)
Lua编程
价格 免费

-- + - * / % 求幂

[展开全文]
古诗十九首 · 2018-01-07 · 该任务已被删除 0

可变参数指的是函数的参数的个数是任意多个的

print函数的参数就是可变参数

 

--参数的位置用...代替
function test(...)--用于打印
    print(arg)--注意参数arg  函数接受的多个参数都会被传入arg  arg是表 
    --如果想访问表中的数据 需要 arg[索引] 访问
    --还有个注意的地方 这然传入的数据保存在arg表中时 表的最后多了个值 这个值保存了表的数据个数
end


function test(...)
    local arg = {...}--这样的表就是不带数据个数的表 避免了上面的问题
    res = 0;
    for k,v in pairs(arg) do
        res = res + v
    end
    print(res)
end
test(1,2,3,4,5)

[展开全文]
古诗十九首 · 2018-01-07 · 该任务已被删除 0

--函数总结
函数关键字前也有修饰符 

可加local或不加

像变量一样表示全局函数或者局部函数


--函数的定义
function max(num1,num2)--比较两个数的大小
    if(num1>num2) then
        return num1
    else 
        return num2
    end
end
print(max(1,10))

--函数可以作为数据赋值 可以作为参数传递 相当于c#的委托与事件
temp = max
temp(40,3)
--匿名函数可以当做数据赋值

--可以当做参数传递
function myprint(num)
    print(num)
end
function add(num1,num2,myprintfun)
    numadd = num1+num2
    myprintfun(numadd)
end
add(4,6,myprint)

--c#不支持返回多个值 lua支持 不知道现在c#改变了没有
--返回多个值 需要多个变量来接收

[展开全文]
古诗十九首 · 2018-01-07 · 该任务已被删除 0

aaa

[展开全文]
透心凉心飞扬 · 2018-01-04 · 该任务已被删除 0

--[[
    if(布尔表达式) then
        为true的时候需要执行的代码
        
    if(布尔表达式)then
        为true的时候要执行的代码
    else
        为false的时候要执行的代码
    end
    
    if (布尔表达式) then
        //1
    elseif (布尔表达式) then    --elseif否则如果 if elseif 都需要加then else不需要加
        //2
    else
        //3
    end--简而言之就是多选一
--]]

[展开全文]
古诗十九首 · 2017-12-30 · 该任务已被删除 0

ε=(´ο`*)))

[展开全文]
古诗十九首 · 2017-12-30 · 该任务已被删除 0

--for循环
--数值for循环
--[[
    for var=start,end,step do --默认步长变化1 
        循环体
    end
--]]
--如
for i=1,10 do --步长默认加1
    print(i)
end

for i=20,1,-1 do
    print(i)
end

--泛型for循环 
--如
table1 = {key1="moshi",key2="shanliu"};
for k,v in pairs(table1) do
    print(k,v) --使用逗号会自动分隔开值
end

t2 = {"毛笔","铅笔","钢笔"}
for k,v in pairs(t2) do
    print(k,v) --使用逗号会自动分隔开值
end


--c#中的do while 在lua中叫做repeat until do while满足条件继续 until满足停止
--最少执行一次 repeat是重复的意思
--[[
    repeat
        循环体
    until(条件)
--]]
--重复执行循环,直到 指定的条件为真时为止
a =1 
repeat
    print(a)
    a = a + 1
until(a>10)

[展开全文]
古诗十九首 · 2017-12-30 · 该任务已被删除 0

1 whlie

2 for

3 repeat unil

while () do

end

[展开全文]
古诗十九首 · 2017-12-30 · 该任务已被删除 0

--多变量同时赋值
a,b = 10,20;
a,b = 10,"hehe";-赋不同类型的值
--交换赋值
a,b = b,a; --这里结果不是我们想象的20,20 而是20,10
--以上因为赋值的时候 先统一计算右边所有的值 再统一赋值 
--如
a = b , b = a; a = 20,b = 20 错
是 a = 20,b = 10;

--当右边值的数量多余左边的变量时候 忽略掉多余的
--当赋值时 左边的变量多余右边的值 多余的变量默认赋值为nil

--当函数返回的值太多 而接受者只能接受一个的话 多余的被省略掉了

[展开全文]
古诗十九首 · 2017-12-30 · 该任务已被删除 0

类型不固定

 

一般情况下创建的变量都是全局变量

变量名前加上local的才是局部变量

 

两者的生命周期不一样

全局变量不受代码块的影响

局部变量受所在的局部代码块的影响 出了范围便被销毁

 

do

end

制作一个代码块

如果有局部变量与全局变量重名 访问最近的

[展开全文]
古诗十九首 · 2017-12-30 · 该任务已被删除 0

[展开全文]
古诗十九首 · 2017-12-30 · 该任务已被删除 0

--函数的另外一种用法

--函数作为参数传递 
function TestFun(tab,Fun)--tab是表 Fun是函数用于处理tab 这样感觉好像是委托Fun来做这件事
    for k,v in pairs(tab) do
        Fun(k,v)
    end
end
tab = {key1 = "hehe", key2 = "heihei"};
function f1(k,v) --f1作为实参 传给形参Fun
    print(k..":"..v);
end
TestFun(tab,f1);
--以上相当于c#的委托与事件 不过我已经不记得c#的委托与事件


--匿名函数 没有名字 只能用一次 一般代码量都很少 如果代码量很多 还是使用函数
--如
TestFun(tab,function(k,v)print(k.."-"..v)end)--后面部分就是匿名函数 不过这样不美观
--加上换行 改写成
TestFun(tab,
    function(k,v)
        print(k.."-"..v);
    end
)

[展开全文]
古诗十九首 · 2017-12-30 · 该任务已被删除 0

--[[ c#中取得阶乘函数
    int fact(int n)
    {
        if(n==1)
            return n;
        else
            return n*fact(n-1);
    }

--]]

--同样在lua中定义个函数 需要关键字 不用写上返回类型 函数可以返回任意类型 或不返回
--函数参数 也不需要类型 
--函数不需要{}
    function fact(n)
            if n==1 then
                return n;
            else 
                return n*fact(n-1);
            end
    end

    print(fact(3))

--以上是函数的定义 和函数的使用    
    --函数也可以当做类型使用 把一个函数当做一个类型来使用
    --如
    fact2 = fact ;--把函数fact赋值给了fact2 因此fact2也有了fact的功能 也同样能够调用
    --函数可以当做值 类型就是function
    
    --约定大于限制 自己注意参数

[展开全文]
古诗十九首 · 2017-12-30 · 该任务已被删除 0

表中使用字符串作为key的话

是不需要用""括起来的

 

--表索引的特性和关联数组很像
--{}构建表达式
table1 = {} --空表

table2 = {key1=100,key2="value2",2 = 200} --表名 键值对 最后2=200是不对的 待3纠正

biao = {} --
print(biao)--输出了表的类型以及它的内存地址 


--访问表中值的两种方法
hehe = {key1="111",key2="3333"}
print(hehe.key1); --表名.键名
print(hehe["key1"]);--表名["键名"]

--一种表现形式 这种可以当作数组使用 不能用.访问 只可用[]访问
table3 = {"apple","stop","babnbab"}--只有值,没有key,也就是没有键 但也有默认的key 从1开始

--遍历表的方法 利用for 和 pairs方法 取得表的键值对
for key,value in pairs(table3) do
    print(key..":"..value)
end

--这里没有参菜鸟教程的这部分
a = {}    --空表
a["key"] = "value" --往表中加入 键值对 key value
key = 10    --声明变量
a[key] = 22   --往表中加入键值对 10 22
a[key] = a[key] + 11 --对键操作 改变值为22+11=33   
for k, v in pairs(a) do --遍历表
    print(k .. " : " .. v)
end

[展开全文]
古诗十九首 · 2017-12-26 · 该任务已被删除 0

小数整数都被当做数字类型

e指的是指数 

其中 E(代表指数)表示将前面的数字乘以 10 的 n 次幂 n次幂就是那个加或者减的数

或者e代指10 后面加就右移 减就左移

[展开全文]
古诗十九首 · 2017-12-25 · 该任务已被删除 0

boolean 类型只有两个可选值:true(真) 和 false(假),Lua 把 false 和 nil 看作是"假",其他的都为"真"

 

在判断中nil会被当做false处理 type中还是判断为nil

 

if then  如果 就

[展开全文]
古诗十九首 · 2017-12-23 · 该任务已被删除 0

[展开全文]
你又来看我了 · 2017-12-22 · 该任务已被删除 0

全局变量:

不需要声明,给一个变量赋值后即创建了这个全局变量。

删除全局变量给其赋值为“nil”

egg: b = nil

[展开全文]
你又来看我了 · 2017-12-22 · 该任务已被删除 0

标示符不允许使用特殊字符@¥%,最好不要使用下划线加大写字母的标示符。

[展开全文]
你又来看我了 · 2017-12-22 · 该任务已被删除 0

“--”:单行注释

"--[[

--]]"多行注释

[展开全文]
你又来看我了 · 2017-12-22 · 该任务已被删除 0