我正在制作一个函数,用于生成 n 个随机数的数组,但是我的 while 循环比较会抛出错误。
while ar.len() as i32 < size { }
投诉文件中:期望其中之一 !
,(
,+
,,
,::
,<
或者 >
,却发现了 {
。
如果我删除 as i32
,它会报错 mismatch types
,如果我在大小变量中添加 as usize
,那么它就不会再抱怨了。
我正在制作一个函数,用于生成 n 个随机数的数组,但是我的 while 循环比较会抛出错误。
while ar.len() as i32 < size { }
投诉文件中:期望其中之一 !
,(
,+
,,
,::
,<
或者 >
,却发现了 {
。
如果我删除 as i32
,它会报错 mismatch types
,如果我在大小变量中添加 as usize
,那么它就不会再抱怨了。
usize
,通常是机器的本地大小。在 64 位 x64 处理器上,这意味着 usize
是 64 位,在 32 位 x86 处理器上,它将是 32 位。usize
转换为 i32
将根据您运行的机器类型而有所不同。
while (ar.len() as i32) < size { }
while ar.len() < size as usize { }
另请参阅:
Vec<usize>
的东西,但是它找到了{
而不是>
,并感到困惑。是的,i32
没有任何参数,但解析器不知道这一点。所有这些都发生在那种信息被知道之前。 - DK.try_from
,例如 while i32::try_from(ar.len()).unwrap() < size { }
,这将导致代码在无法转换时出错,而不是盲目地切掉多余的位。当然,您也可以通过执行比 unwrap
更复杂的操作来处理错误。 - Michael Andersonusize
根据目标平台会占用 16、32 或 64 位。然而,它 不是 u16
/ u32
/ u64
的别名,而是一种独立的类型。此外,usize
是无符号的,而 i32
/ i64
则是有符号的。 - Shepmaster看起来你的size
是i32
类型。你需要使用括号:
while (ar.len() as i32) < size { }
或将size
转换为usize
:
while ar.len() < size as usize { }
由于len()
返回一个usize
,而比较运算符两边的类型需要匹配。在第一个例子中,你需要加上括号,以便<
操作符不会将i32
与size
进行比较,而是将ar.len() as i32
与size
进行比较,这是你的意图。
size
的类型设为usize
。 - starblue