下面的代码将usize
放入一个枚举中,我想在usize
上进行迭代。当我将usize
直接传递给for循环时,我得到了编译错误"expected Integer but found &usize
。但是,当我克隆usize时,for循环可以工作。
查阅文档,clone()
方法也应该返回usize
。这段代码是否有效,因为clone方法将所有权交给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");
}
}
}
2条答案
按热度按时间wlzqhblo1#
对于范围表达式,您需要的是值,而不是引用。由于“匹配人体工程学”,
size
类型最终成为引用。您没有显示正在匹配的表达式,但很可能您的匹配值的类型是&Command
。如果您在模式的开头添加一个&
,即&Command::Append(size)
,size
的类型将是usize
,并且在0..size
上进行迭代应该可以很好地工作。5n0oy7gb2#
是的。遍历范围需要值,而不是引用。但是,由于
usize
是Copy
,所以最好只解引用:for i in 0..*size
.