Какой из них больше Idiomati c в ржавчине? - PullRequest
2 голосов
/ 13 апреля 2020

Что более идиоматично c ржавчина в этом случае

//This is a C like a syntax where you can get the value at a location through *.
fn largest_i32(list: &[i32])-> i32{
    let mut largest = list[0];

    for item in list.iter(){
        if *item > largest{
            largest = *item;
        }

    };
    largest
}

или

//This syntax seems confusing to me, Is rust doing derefrecing iteself.
fn largest_i32(list: &[i32]) -> i32 {
    let mut largest = list[0];

    for &item in list.iter() {
        if item > largest {
            largest = item;
        }
    }

    largest
}

1 Ответ

4 голосов
/ 13 апреля 2020

В этом конкретном случае наиболее идиоматическим решением c будет

fn largest_i32(list: &[i32]) -> i32 {
    *list.iter().max().unwrap()
}

Но если бы мне пришлось выбирать между двумя написанными вами функциями, я бы выбрал вторую.

//This syntax seems confusing to me, Is rust doing derefrecing iteself.

for петли принимают паттерн . list.iter() является итератором для элементов с типом &i32, который сопоставляется с шаблоном &item, поэтому item является деструктурированным в i32. Это имеет тот же эффект, что и разыменование.

Сопоставление с образцом распространено в Rust. Вы можете прочитать обо всех местах, где разрешены шаблоны здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...