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

时间:2017-12-26 17:35:17

标签: rust

我正在尝试接收一些输入,然后返回值,如果它有效,或者如果不是则再次输入。但是,我试图通过借用检查器问题来检查值并返回它(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模式?我怎样才能让它发挥作用?

1 个答案:

答案 0 :(得分:1)

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

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