Что такое Rust-эквивалент оператора распространения JavaScript для массивов? - PullRequest
0 голосов
/ 09 февраля 2019

В JavaScript есть оператор, называемый оператором распространения, который позволяет очень кратко комбинировать массивы.

let x = [3, 4];
let y = [5, ...x]; // y is [5, 3, 4]

Есть ли способ сделать что-то подобное в Rust?

Ответы [ 3 ]

0 голосов
/ 09 февраля 2019

Нет, но, возможно, вы можете попробовать сделать макрос, похожий на vec!

0 голосов
/ 09 февраля 2019

Если вам просто нужно, чтобы y был итеративным, вы можете сделать:

let x = [3,4];
let y = [5].iter().chain(&x);

Если вам нужно, чтобы он был индексируемым, вам нужно собрать его в вектор.

let y: Vec<_> = [5].iter().chain(&x).map(|&x|x).collect();
0 голосов
/ 09 февраля 2019

Массивы Rust имеют фиксированную длину , поэтому просто объединить их невозможно;обычным способом достижения этого результата было бы иметь изменяемый вектор и расширить его с помощью среза:

fn main() {
    let x = [3, 4];
    let mut y = vec![5];
    y.extend_from_slice(&x);

    println!("{:?}", y); // [5, 3, 4]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...