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

参考技术A 为C或C + +程序是要找到程序入口的主要功能。 Lua是没有,但你可以把代码写一个主函数中调用,模仿什么 <前T =“代码”L =“PHP “ - 这是一个Lua脚本
本地函数main()

对于i = 1,9做

当地味精= string.format(”你好!%d次“,我)

;打印(MSG)结束

结束
主要()

Lua快速上手

目录

声名变量

 number类型和运算符

 string类型

        字符串和数字互相转化

 函数

table数组

数字下标

table的接口

 字符串下标的table

全局table——_G

lua里的真和假

分支语句

 循环语句

for循环

 while循环

 补充:


声名变量

        在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循环)的主要内容,如果未能解决你的问题,请参考以下文章

lua for循环。。。如何记录满足条件的输出的次数

lua中,in pairs的循环的顺序问题

Java生态/Redis中如何使用Lua脚本

for 循环是不是遍历 Lua 和 Love2d 中的空表?

Lua 上的 For 循环

我可以简化这个 for 循环吗?