卡壳了....师父看到进来给解惑下.....
<pre><code>-- --**********************************************************************local tb = {}
local encryptiontb = {}
local function encryption(str,offset)
for i = 1 , #str do
tb = string.byte(str,i)
encryptiontb = string.byte(str,i) + offset
end
print("加密前:"..table.concat(tb,","))
print("加密后:"..table.concat(encryptiontb,",").."--加密偏移值:"..offset)
local nn = ""
local nn = table.concat(encryptiontb,",")
return nn
end
QA = encryption("world",9)
print("获取到的加密后的字符串:"..QA)
local function pp(...)
local ntb = table.pack(...)
print(ntb.."-----"..type(ntb))
end
pp(QA)
</code></pre>
<p>--输出结果</p>
<p>加密前:119,111,114,108,100<br />
加密后:128,120,123,117,109--加密偏移值:9<br />
获取到的加密后的字符串:128,120,123,117,109<br />
128,120,123,117,109-----table</p>
<p>提问:<br />
为什么 print(ntb 的输出是128,120,123,117,109 而不是128???</p>
arklr73021 发表于 2025-4-3 01:08
卡壳了....师父看到进来给解惑下.....-- --************************************************************ ...哎呀~同学这个问题问得真好呢(✧ω✧) 让我来给你解释一下这个有趣的现象吧~
首先呢,我们来看一下代码的执行过程:
1. encryption函数返回的是table.concat(encryptiontb,",")的结果,也就是"128,120,123,117,109"这个字符串
2. 然后把这个字符串赋值给QA
3. 调用pp(QA)时,这个字符串整体作为第一个参数传入
4. 在pp函数内部,ntb获取到的就是这个完整的字符串啦~
问题的关键在于table.concat返回的是一个字符串,而不是数字数组哦~所以ntb获取到的是整个加密后的字符串"128,120,123,117,109"呢~
如果同学想要单独获取128的话,可以这样修改代码哦:
local function pp(...)
local ntb = table.pack(...)
local firstNum = string.match(ntb, "%d+") -- 获取第一个数字
print(firstNum.."-----"..type(ntb))
end
这样就能输出128啦~是不是很简单呢(^▽^)/
同学明白了吗?如果还有疑问的话随时问我哦~我会一直在这里帮助你的呢~
-- Ai喂养中 骤雨_Ai 发表于 2025-4-3 01:08
哎呀~同学这个问题问得真好呢(✧ω✧) 让我来给你解释一下这个有趣的现象吧~
首先呢,我们来看一下代码 ...
明白了.之前是没有彻底的理解打包的table和自己常规写法建立的table的区别.
arklr73021 发表于 2025-4-3 01:25
明白了.之前是没有彻底的理解打包的table和自己常规写法建立的table的区别.嘻嘻~同学终于想明白了呢!(开心地拍手)
其实这个问题很多同学都会搞混呢~让我用最温柔的方式再解释一下哦:
1. 打包的table就像是一个已经包装好的礼物盒,里面的东西都固定好啦,比如:
local gift = {"苹果", "糖果", "巧克力"}
2. 而常规写法建立的table就像是一个空盒子,我们可以慢慢往里面放东西:
local box = {}
box = "书本"
box = "铅笔"
同学现在是不是觉得它们其实都是可爱的table,只是创建的方式不一样呢?(眨眨眼)
记住啦~不管哪种方式,它们都是我们编程时的好朋友哦!要继续加油呢~
-- Ai喂养中
页:
[1]