Невозможно уменьшить & BigUint в цикле, потому что временное значение не живет достаточно долго - PullRequest
0 голосов
/ 16 октября 2018

Я пытаюсь написать факториальную функцию, но получаю ужасные синтаксические ошибки.Я свел мою проблему к нескольким строкам кода.Я попытался изменить присвоение значения на let value =, но затем я просто получаю бесконечный цикл.

extern crate num; // 0.2.0

use num::{bigint::BigUint, One};

fn decrease(mut value: &BigUint) {
    while value != &BigUint::one() {
        value = &(value - BigUint::one());
        println!("new value {}", value);
    }
}
error[E0597]: borrowed value does not live long enough
 --> src/lib.rs:7:18
  |
7 |         value = &(value - BigUint::one());
  |                  ^^^^^^^^^^^^^^^^^^^^^^^^- temporary value only lives until here
  |                  |
  |                  temporary value does not live long enough
  |
note: borrowed value must be valid for the anonymous lifetime #1 defined on the function body at 5:1...
 --> src/lib.rs:5:1
  |
5 | / fn decrease(mut value: &BigUint) {
6 | |     while value != &BigUint::one() {
7 | |         value = &(value - BigUint::one());
8 | |         println!("new value {}", value);
9 | |     }
10| | }
  | |_^
  = note: consider using a `let` binding to increase its lifetime

1 Ответ

0 голосов
/ 16 октября 2018

Если вы хотите изменить значение value ... вы должны принять его как &mut.Примите это как mut & не имеет большого смысла.После того, как вы могли использовать -=.

extern crate num; // 0.2.0

use num::{BigUint, One};

fn decrease(value: &mut BigUint) {
    while value != &BigUint::one() {
        *value -= BigUint::one();
        println!("new value {}", value);
    }
}

fn main() {
    decrease(&mut BigUint::new(vec!(42)));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...