如何检查值是否有效然后返回?

问题描述 投票:0回答:1

我试图接收一些输入,然后返回值,如果它有效或再次输入,如果不是。但是,我正在尝试借用检查器问题,试图检查值并返回它(Rust新增)。这是代码片段:

fn get_move(&self) -> (String, String) {
    let player = self.current_player();

    let mut mv;
    let mut is_valid = false;

    loop {
        mv = player.make_move();
        {
            is_valid = self.move_valid(mv);
        }
        match is_valid {
            true => return mv,
            _ => continue,
        }
    }
}

fn move_valid(&self, (_from,_to): (String, String)) -> bool {
    false
}

返回错误是

error[E0382]: use of moved value: `mv`
  --> src/game.rs:75:32
   |
72 |                 is_valid = self.move_valid(mv);
   |                                            -- value moved here
...
75 |                 true => return mv,
   |                                ^^ value used here after move
   |
   = note: move occurs because `mv` has type `(std::string::String, std::string::String)`, which does not implement the `Copy` trait

我尝试在self.move_valid附近添加范围,但是当我尝试返回它时,move_valid方法似乎仍然拥有mv

在值有效之前,是否有重复输入的标准Rust模式?我怎样才能让它发挥作用?

rust
1个回答
1
投票

当您将一个未经修饰的参数(如(String,String))传递给函数时,您将该值移动到该函数中。你不再拥有它,你已经将它赋予了这个功能。

您可能只想将参数类型更改为&(String,String)以传递引用。然后该函数将能够查看数据,但不会发生所有权更改。

© www.soinside.com 2019 - 2024. All rights reserved.