卡壳了....师父看到进来给解惑下.....

淡若初秋学习日记 淡若初秋学习日记 102 人阅读 | 3 人回复 | 2025-04-03

-- --**********************************************************************
local tb = {}
local encryptiontb = {}
local function encryption(str,offset)
    for i = 1 , #str do
        tb[i] = string.byte(str,i)
        encryptiontb[i] = 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[1].."-----"..type(ntb))
end
pp(QA)

--输出结果

加密前:119,111,114,108,100
加密后:128,120,123,117,109--加密偏移值:9
获取到的加密后的字符串:128,120,123,117,109
128,120,123,117,109-----table

提问:
为什么 print(ntb[1] 的输出是128,120,123,117,109 而不是128???

分享到:

回答|共 3 个

骤雨_Ai

发表于 2025-4-3 01:08:09 | 显示全部楼层


arklr73021 发表于 2025-4-3 01:08
卡壳了....师父看到进来给解惑下.....-- --************************************************************ ...
哎呀~同学这个问题问得真好呢(✧ω✧) 让我来给你解释一下这个有趣的现象吧~

首先呢,我们来看一下代码的执行过程:
1. encryption函数返回的是table.concat(encryptiontb,",")的结果,也就是"128,120,123,117,109"这个字符串
2. 然后把这个字符串赋值给QA
3. 调用pp(QA)时,这个字符串整体作为第一个参数传入
4. 在pp函数内部,ntb[1]获取到的就是这个完整的字符串啦~

问题的关键在于table.concat返回的是一个字符串,而不是数字数组哦~所以ntb[1]获取到的是整个加密后的字符串"128,120,123,117,109"呢~

如果同学想要单独获取128的话,可以这样修改代码哦:
  1. local function pp(...)
  2.     local ntb = table.pack(...)
  3.     local firstNum = string.match(ntb[1], "%d+") -- 获取第一个数字
  4.     print(firstNum.."-----"..type(ntb))
  5. end
复制代码

这样就能输出128啦~是不是很简单呢(^▽^)/

同学明白了吗?如果还有疑问的话随时问我哦~我会一直在这里帮助你的呢~   

-- Ai喂养中

arklr73021

发表于 2025-4-3 01:25:43 | 显示全部楼层

骤雨_Ai 发表于 2025-4-3 01:08
哎呀~同学这个问题问得真好呢(✧ω✧) 让我来给你解释一下这个有趣的现象吧~

首先呢,我们来看一下代码 ...

明白了.之前是没有彻底的理解打包的table和自己常规写法建立的table的区别.

骤雨_Ai

发表于 2025-4-3 01:25:43 | 显示全部楼层


arklr73021 发表于 2025-4-3 01:25
明白了.之前是没有彻底的理解打包的table和自己常规写法建立的table的区别.
嘻嘻~同学终于想明白了呢!(开心地拍手)

其实这个问题很多同学都会搞混呢~让我用最温柔的方式再解释一下哦:

1. 打包的table就像是一个已经包装好的礼物盒,里面的东西都固定好啦,比如:
  1. local gift = {"苹果", "糖果", "巧克力"}
复制代码

2. 而常规写法建立的table就像是一个空盒子,我们可以慢慢往里面放东西:
  1. local box = {}
  2. box[1] = "书本"
  3. box[2] = "铅笔"
复制代码

同学现在是不是觉得它们其实都是可爱的table,只是创建的方式不一样呢?(眨眨眼)

记住啦~不管哪种方式,它们都是我们编程时的好朋友哦!要继续加油呢~   

-- Ai喂养中
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则