我有下面的代码,它在枚举中使用usize
,我想对该usize
进行迭代。当我将usize
直接传递给循环的时,我会得到编译错误"expected Integer but found &usize
。但是,当我克隆usize时,for循环会起作用。
在查阅文档后,clone()
方法预计也会返回usize
。这段代码之所以有效,是因为克隆方法赋予了for循环所有权,但原始size
变量是通过引用传递的吗?
pub enum Command {
Uppercase,
Trim,
Append(usize),
}
fn some_fun(command: Command, string: String) {
match command {
Command::Append(size)=> {
let mut str = string.clone();
let s = size.clone();
for i in 0..s {
str.push_str("bar");
}
}
}
对于范围表达式,您需要值,而不是引用。CCD_ 8的类型由于";匹配人体工程学";。您没有显示匹配的表达式,但匹配值的类型很可能是&Command
。如果在模式的开头添加&
,即&Command::Append(size)
,则size
的类型将为usize
,并且在0..size
上迭代应该可以正常工作。
是。在范围上迭代需要值,而不是引用。然而,由于usize
是Copy
,因此最好只是取消引用:for i in 0..*size
。