如何将向量解析为函数?

时间:2018-08-21 21:19:41

标签: rust

这个想法是发送一组向量的字符,然后让该函数显示当前正确的猜测。

这是我的主要爱好:

def sign_s3_upload(request):
    object_name = request.GET['objectName']
    content_type = mimetypes.guess_type(object_name)[0]
    if content_type == 'audio/x-wav':
        content_type = 'audio/wav'

    signed_url = conn.generate_url(
        300,
        "PUT",
        settings.AWS_STORAGE_BUCKET_NAME,
        'uploads/' + object_name,
        headers = {'Content-Type': content_type,
                   'x-amz-acl': 'public-read',
                   })


    return HttpResponse(json.dumps({'signedUrl': signed_url}))

这是函数:

fn main() {
    let mut guessedLetters = vec![];
    displayWord(guessedLetters);
}

我不知道我该在fn displayWord(correctGuess: Vec<char>) { let mut currentWord = String::new(); for x in 0..5 { currentWord.push(correctGuess[x]); } println!("Current guesses: {}", currentWord); } 的参数中写什么。

1 个答案:

答案 0 :(得分:2)

您的代码有些错误。

第一个错误很简单:

--> src/main.rs:38:25
   |
38 |             displayWord(guessed_Letters);
   |                         ^^^^^^^^^^^^^^^ expected char, found enum     `std::option::Option`
   |
   = note: expected type `std::vec::Vec<char>`
              found type `std::vec::Vec<std::option::Option<char>>`

您编写的函数期望矢量为字符...但是您要向其传递Option<char>的矢量。这是在这里发生的:

guessed_Letters.push(line.chars().nth(0));

According to the documentationnth方法返回一个Option。此处的快速解决方案是unwrap Option以获得基础值:

guessed_Letters.push(line.chars().nth(0).unwrap());

您的下一个错误是:

error[E0382]: use of moved value: `guessed_Letters`
  --> src/main.rs:38:25
   |
38 |             displayWord(guessed_Letters);
   |                         ^^^^^^^^^^^^^^^ value moved here in previous iteration     of loop
   |
   = note: move occurs because `guessed_Letters` has type `std::vec::Vec<char>`, which does not implement the `Copy` trait

这是在循环的第一次迭代中转移向量的所有权,编译器告诉您,后续迭代将违反Rust的所有权规则。

这里的解决方案是通过引用传递向量

displayWord(&guessed_Letters);

..并且您的方法还应该接受引用:

fn displayWord(correctGuess: &Vec<char>) {

  let mut currentWord = String::new();

  for x in 0..5 { 
    currentWord.push(correctGuess[x]);
  }
  println!("Current guesses: {}", currentWord);
}

可以缩短以使用切片并仍然可以使用:

fn displayWord(correctGuess: &[char]) {