Rust在执行usize.clone()时返回整数?

hzbexzde  于 2022-11-12  发布在  其他
关注(0)|答案(2)|浏览(143)

下面的代码将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");
          }

     }
  }
wlzqhblo

wlzqhblo1#

对于范围表达式,您需要的是值,而不是引用。由于“匹配人体工程学”,size类型最终成为引用。您没有显示正在匹配的表达式,但很可能您的匹配值的类型是&Command。如果您在模式的开头添加一个&,即&Command::Append(size)size的类型将是usize,并且在0..size上进行迭代应该可以很好地工作。

5n0oy7gb

5n0oy7gb2#

是的。遍历范围需要值,而不是引用。但是,由于usizeCopy,所以最好只解引用:for i in 0..*size .

相关问题