Lua代码简化问题(变量,for循环)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Lua代码简化问题(变量,for循环)相关的知识,希望对你有一定的参考价值。
hSlR1=getColor(taxca, tbxcb);
hSlR2=getColor(taxca, tbxcb+tzbjg);
hSlR3=getColor(taxca, tbxcb+2*tzbjg);
hSlR4=getColor(taxca, tbxcb+3*tzbjg);
hSlR5=getColor(taxca, tbxcb+4*tzbjg);
hSlR6=getColor(taxca, tbxcb+5*tzbjg);
hSlR7=getColor(taxca, tbxcb+6*tzbjg);
hSlR8=getColor(taxca+tzbjg, tbxcb);
hSlR9=getColor(taxca+tzbjg, tbxcb+tzbjg);
hSlR10=getColor(taxca+tzbjg, tbxcb+2*tzbjg);
hSlR11=getColor(taxca+tzbjg, tbxcb+3*tzbjg);
hSlR12=getColor(taxca+tzbjg, tbxcb+4*tzbjg);
hSlR13=getColor(taxca+tzbjg, tbxcb+5*tzbjg);
hSlR14=getColor(taxca+tzbjg, tbxcb+6*tzbjg);
hSlR15=getColor(taxca+2*tzbjg, tbxcb);
hSlR16=getColor(taxca+2*tzbjg, tbxcb+tzbjg);
hSlR17=getColor(taxca+2*tzbjg, tbxcb+2*tzbjg);
hSlR18=getColor(taxca+2*tzbjg, tbxcb+3*tzbjg);
hSlR19=getColor(taxca+2*tzbjg, tbxcb+4*tzbjg);
hSlR20=getColor(taxca+2*tzbjg, tbxcb+5*tzbjg);
hSlR21=getColor(taxca+2*tzbjg, tbxcb+6*tzbjg);
……………………………………
hSlR44=getColor(taxca+6*tzbjg, tbxcb+tzbjg);
hSlR45=getColor(taxca+6*tzbjg, tbxcb+2*tzbjg);
hSlR46=getColor(taxca+6*tzbjg, tbxcb+3*tzbjg);
hSlR47=getColor(taxca+6*tzbjg, tbxcb+4*tzbjg);
hSlR48=getColor(taxca+6*tzbjg, tbxcb+5*tzbjg);
hSlR49=getColor(taxca+6*tzbjg, tbxcb+6*tzbjg);
怎样将这段代码简化,后面要调用到hSIR**
lua代码本不应该这么复杂吧,是不是用法有问题
如果你非要简化的话,用表把所有变量存起来就好了了,然后用pairs遍历就ok了
function cc( n,taxca,tzbjg,tbxcb )-- body
local tmpTable =
for i=1,n do
for j=1,7 do
tmpTable["hSlR"..i] = getColor(taxca + (i-1)*tzbjg,tbxcb + (j-1)*tzbjg)
end
end
return tmpTable
end追问
应该是用法问题,我就是初学者,不会使用,我想问后面我调用hSlR时能不能用变量比如hSlR[i]或hSlR[i+1]这些来控制后面的数字下标,,,不太懂,请指教
追答local nnnn = 1
function getColor(taxca, tbxcb)
nnnn = nnnn + 1
--随便返回一个值
return nnnn
end
local tmpTable = cc(14,1,1,1)
--经过函数返回得表就够是这样子的可以通过k值也就是tmpTable[hSIR数字]进行访问,lua在这里适合C有区别的他是一个key值和value类似于数组的样子,也可以像C一样去访问,tmpTable[数字]但是值得排列会有问题,因为这里不是按下标排列的,是随机的,跟k的哈希值有点关系。如果是连续得就是用最下面那个就能读出来了。
-- tmpTable =
-- hSlR2 = 15
-- hSlR7 = 50
-- hSlR1 = 8
-- hSlR3 = 22
-- hSlR12 = 85
-- hSlR13 = 92
-- hSlR14 = 99
-- hSlR9 = 64
-- hSlR11 = 78
-- hSlR6 = 43
-- hSlR10 = 71
-- hSlR4 = 29
-- hSlR5 = 36
-- hSlR8 = 57
-
for k,v in pairs(tmpTable) do
print(k.." = "..v)
end
print("----------------------------------")
for i=1,14 do
print(tmpTable["hSlR"..i])
end
-- hSlR2 = 15
-- hSlR7 = 50
-- hSlR1 = 8
-- hSlR3 = 22
-- hSlR12 = 85
-- hSlR13 = 92
-- hSlR14 = 99
-- hSlR9 = 64
-- hSlR11 = 78
-- hSlR6 = 43
-- hSlR10 = 71
-- hSlR4 = 29
-- hSlR5 = 36
-- hSlR8 = 57
-- ----------------------------------
-- 8
-- 15
-- 22
-- 29
-- 36
-- 43
-- 50
-- 57
-- 64
-- 71
-- 78
-- 85
-- 92
-- 99
本地函数main()
对于i = 1,9做
当地味精= string.format(”你好!%d次“,我)
;打印(MSG)结束
结束
主要()
Lua快速上手
目录
声名变量
在lua中,赋值一个变量就相等于声名了一个变量。没有被声名的变量,该变量值等于nil(相当于c语言的NULL)。
注意:在lua里声名的变量默认是全局变量。在其他文件中也可以使用。作用和c语言相同
如果要让变量变为局部变量,在变量前加上local关键字。
local a = 10
赋值语言可以多变量赋值:
number类型和运算符
c语言中有很多内置类型,int,char,float,double等,在lua中,这些类型统一都是number类型。
lua语言也支持16进制赋值和科学计数法。
运算符:lua基本上支持c语言中的运算符,比如加减乘除,幂,左移右移等。
string类型
声名字符串变量,也是通过赋值声名,字符串使用单引号或双引号皆可,并且lua支持转义字符。
使用"[[ ]]",也是声名字符,并且字符串是原原本本保存在里面,不会有什么转义。
字符串的连接符号,".."
字符串和数字互相转化
如果tonumber转换失败返回nil
在字符串变量前加一个'#'可以获取字符串的长度。
函数
函数的格式为:
返回值,如果函数没有返回,默认返回nil,有返回,返回对应值。
函数返回值,也可以返回多个值
table数组
-
数字下标
数字下标的使用和c语言里的数组差不多,里面可以保存数字,字符串,另外一个table,或者函数等。但是起始时从1号小标开始的。
如果访问了没有定义的table下标,该值为nil,但是也可以进行赋值。
可以使用'#'来获取table元素的个数。
table的接口
插入接口 insert
也可以使用table提供的insert接口,去插入元素,或者在指定位置插入。
移除接口remove
移除某个位置的元素,并且会返回移除的元素。
-
字符串下标的table
相当于c语言中的结构体,可以用数组的形式(数组的key必须是字符串)或者'.'的形式访问。
下标用字符串表示。
插入元素
移除元素
使用不了table的remove接口,可以将该字符串对应值置nil。
总结移除元素两种方法:置空或使用table接口remove
1. 数字下标,可以使用remove和置空
2. 字符串下标,可以使用置空。
-
全局table——_G
全局变量都保存在_G全局table里。
注意:其实table也是一个全局变量,他的类型是一个table,名字也是table,里面包含了元素insert和remove函数。
lua里的真和假
lua中有一种bool类型,只有true和false两种值。
在lua中只有false和nil表示假,其他表示真。0表示真
注意:lua中的逻辑操作and,or可以直接放回对应值。
and如果都是真,返回最后一个为真的值,如果一真一假,返回对应假的值,如果全为假,返回第一个假的值。
or如果都是真,返回第一个为真的值,如果一真一假,返回对应真的值,如果全为假,返回最后一个假的值。
利用该现象可以实现短路求值。
比如:
分支语句
用then表示后面要执行的分支语句,用end表示分支语句的结束。
循环语句
lua中有三种循环,分别是for循环,while循环和repeat循环。while和repeat循环使用差不多。
-
for循环
for 变量定义,结束值,步长(不写默认是1) do
代码块
end
注意:
1. for这行定义的变量作用域只在for循环中,但是在for循环中不能修改出了for循环就没有意义了。
2. 并且该变量只能在for循环中进行访问,不能进行修改。进行修改时,向但与在for循环里新建了一个局部变量。
3. 可以使用break关键字,没有continue关键字。
-
while循环
while 条件 do
语句
条件变更
end
支持break
补充:
lua里的字符串和c语言中的字符数组很像。可以使用string的char函数构成lua的字符串,用string的byte获得字符串中的某一位字符。并且会将0保存在字符串中,不会影响字符串的长度。
以上是关于Lua代码简化问题(变量,for循环)的主要内容,如果未能解决你的问题,请参考以下文章