【问题标题】:Trying to understand example in book "Programming in Lua"试图理解“Lua 编程”一书中的例子
【发布时间】:2019-10-11 16:00:21
【问题描述】:

尝试理解 Lua 编程第四版中的练习 5.1

代码已包含,但我不明白发生了什么

sunday = "monday" ; monday = "sunday"
print("After first line ", sunday, monday)
t = {sunday = "monday", [sunday] = monday}
print("Printing #t", #t)
for k = 1 , #t do
  print(k, t[k])
end
print("After printing ipairs")
print(t.sunday, t[sunday], t[t.sunday])

我得到的结果如下:-

周一周日第一线之后
打印 #t 0
打印后ipairs
周一周日周日

基本上是第 3 行让我感到困惑。为什么t中的元素个数为零??

【问题讨论】:

    标签: lua


    【解决方案1】:

    表 t 的长度被定义为任意整数索引 n,使得 t[n] 不为 nil 且 t[n+1] 为 nil;此外,如果 t1 为零,则 n 可以为零。对于从 1 到给定 n 的非 nil 值的常规数组,它的长度正好是 n,它的最后一个值的索引。如果数组有“洞”(即,其他非 nil 值之间的 nil 值),那么 #t 可以是直接在 nil 值之前的任何索引(也就是说,它可以将任何这样的 nil 值视为结束的数组)。

    取自Lua 5.1 Manual

    要使用# 运算符正确获取表的长度,表必须使用整数索引并且是连续的。例如:t = {[1] = "monday", [2] = monday}

    在您的情况下,表的键是字符串。有一些方法可以遍历非顺序表,其中一种方法是使用函数pairs

    t = {sunday = "monday", [sunday] = monday}
    for k, v in pairs(t) do
      print(k, v)
    end
    

    同样,要获得非序列表的长度,您可以遍历该表并计算元素的数量。 How to get number of entries in a Lua table?

    【讨论】:

    • 感谢刘易斯花时间解决(?)我的问题。
    猜你喜欢
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多