有什么解决办法吗?
是否可以评估借用的布尔值?我对铁锈还很陌生,所以我可能没有使用正确的术语。
fn control(map: &[bool;5]) -> bool {
let mut hold = false;
for n in map.iter() {
if n {
hold = true;
break;
}
}
hold
}
您可以像在if *n {
中那样简单地取消引用n
,它就会编译。在您的示例中,n
是&bool
,*n
为您提供了编译器所期望的bool
。
control
的较短版本是
fn control(map: &[bool]) -> bool {
map.iter().any(|e| *e)
}
以上采用借用切片(&[bool]
(而不是固定大小的数组作为输入参数;严格来说,这更强大,因为所有数组都可以作为切片借用。您的版本中的循环被折叠到所有迭代器提供的any()
方法中。