lua table.sort崩溃时使用“排序”;尝试将nil与字符串“进行比较”;
我正在尝试在嵌入式linux设备上使用lualua 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
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最初似乎存在一些问题(似乎有些库和函数工作不正常),但这是很久以前的事了。