lua table.sort崩溃时使用“排序”;尝试将nil与字符串“进行比较”;

lua table.sort崩溃时使用“排序”;尝试将nil与字符串“进行比较”;,lua,embedded-linux,yocto,Lua,Embedded Linux,Yocto,我正在尝试在嵌入式linux设备上使用luatable.sort给出一个有线错误试图将nil与字符串进行比较。我在本地lua解释器上绑定了这段代码,它成功了。是什么导致了这种行为?嵌入式lua是通过yocto编译的 # lua Lua 5.3.5 Copyright (C) 1994-2018 Lua.org, PUC-Rio > a={} > a[#a+1]="foo" > a[#a+1]="baar" > a[#a+1]=&q

我正在尝试在嵌入式linux设备上使用lua
table.sort
给出一个有线错误
试图将nil与字符串进行比较
。我在本地lua解释器上绑定了这段代码,它成功了。是什么导致了这种行为?嵌入式lua是通过
yocto
编译的

# lua
Lua 5.3.5  Copyright (C) 1994-2018 Lua.org, PUC-Rio
> a={}
> a[#a+1]="foo"
> a[#a+1]="baar"
> a[#a+1]="baar_1"
> a[#a+1]="baar_2"
> print(a[0])
nil
> print(#a)  
4
> for i=0,#a do print (a[i]) 
>> end
nil
foo
baar
baar_1
baar_2
> table.sort(a)
attempt to compare nil with string
stack traceback:
        [C]: in function 'table.sort'
        stdin:1: in main chunk
        [C]: in ?
> table.sort(a, function(x,y) print(x); print(y); return x < y end)
foo
baar_2
nil
baar_2
stdin:1: attempt to compare nil with string
stack traceback:
        stdin:1: in function <stdin:1>
        [C]: in function 'table.sort'
        stdin:1: in main chunk
        [C]: in ?
>  for key, val in pairs(a) do print(key, val) end
1       foo
2       baar
3       baar_1
4       baar_2
> 
#lua
Lua 5.3.5版权所有(C)1994-2018 Lua.org,临市局里约
>a={}
>a[#a+1]=“foo”
>a[#a+1]=“巴尔”
>a[#a+1]=“baar#u 1”
>a[#a+1]=“baar_2”
>打印(a[0])
无
>打印(#a)
4.
>对于i=0,#a do print(a[i])
>>结束
无
福
巴尔
巴鲁1
巴鲁2号
>表1.排序(a)
尝试将nil与字符串进行比较
堆栈回溯:
[C] :在函数“table.sort”中
stdin:1:在主块中
[C] :在哪?
>表.排序(a,函数(x,y)打印(x);打印(y);返回x对于键,val成对(a)进行打印(键,val)结束
一福
2巴尔
3巴鲁1
4巴鲁2
> 
  • (更新#1增加打印)
  • (更新#2将打印添加到table.sort)
  • (更新#3增加了循环键/val)

在控制台中键入
print(a[0])
print(#a)
;然后
对于i=0,#a do print(a[i])end
。您可能会看到零或意外的索引,如零。@AlexanderMashin您是对的,
a[0]
nil
,当我在表上循环时,它从0开始,而不是从1开始
a[0]
应该是
nil
,因为Lua数组从1开始。问题是,
table.sort
是否尝试比较不存在的值,如
a[0]
。还有一个想法:
table.sort(a,函数(x,y)打印(x);打印(y);返回x
。同样,有机会看到意外的零。您从哪里获得编译的源代码?Yocto5.3最初似乎存在一些问题(似乎有些库和函数工作不正常),但这是很久以前的事了。