Как инициализировать массив Vec? [Дубликат]

Slice имеет две версии. $slice(aggregation) & amp; $slice(projection) . Вы используете неправильный.

Функция агрегатного среза не имеет встроенной поддержки. Ниже приведен пример одной такой проекции. Сделайте то же самое для всех других полей проекции.

List stype_0 = Arrays.asList("$stype_0", 1, 1);    
Bson project = Aggregates.project(Projections.fields(new Document("stype_0", new Document("$slice", stype_0))));
AggregateIterable iterable = dbCollection.aggregate(Arrays.asList(project));

12
задан Shepmaster 6 December 2016 в 15:05
поделиться

1 ответ

Я копирую ответ chris-morgan и адаптируя его для лучшего ответа на вопрос, чтобы следовать рекомендации dbaupp downthread и соответствовать последним синтаксическим изменениям:

use std::mem;
use std::ptr;

#[derive(Debug)]
struct Thing {
    number: usize,
}

macro_rules! make_array {
    ($n:expr, $constructor:expr) => {{
        let mut items: [_; $n] = mem::uninitialized();
        for (i, place) in items.iter_mut().enumerate() {
            ptr::write(place, $constructor(i));
        }
        items
    }}
}

const SIZE: usize = 50;

fn main() {
    let items = unsafe { make_array!(SIZE, |i| Box::new(Some(Thing { number: i }))) };
    println!("{:?}", &items[..]);
}

Обратите внимание на необходимость использования unsafe здесь: проблема в том, что если функция конструктора panic! s, это приведет к неопределенному поведению.

3
ответ дан Shepmaster 19 August 2018 в 03:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: