Size: a a a

2020 November 01

SS

Slava Sokolovsky in Rust Beginners
Yevhen Kazmin
я пытался, сейчас еще раз попробую
Можешь ещё для своего типа сделать Default и заполнить в массиве всё, кроме i
источник

YK

Yevhen Kazmin in Rust Beginners
Slava Sokolovsky
Можешь ещё для своего типа сделать Default и заполнить в массиве всё, кроме i
static STATES: [TicTacToeStateData; STATES_TOTAL] = {
   let mut res: [MaybeUninit<TicTacToeStateData>; STATES_TOTAL] = unsafe { MaybeUninit::uninit().assume_init() };
   for i in 0..STATES_TOTAL {
       res[i] = MaybeUninit::new(TicTacToeStateData::new(i));
   }
   unsafe { std::mem::transmute::<_, [TicTacToeStateData; STATES_TOTAL]>(res) }
};
источник

YK

Yevhen Kazmin in Rust Beginners
источник

YK

Yevhen Kazmin in Rust Beginners
там ошибки на счет того, что я не могу это вызывать в статике/константе
источник

SS

Slava Sokolovsky in Rust Beginners
Правильно, что не можешь. assume_init не const
источник

YK

Yevhen Kazmin in Rust Beginners
то есть способ с MaubyUninit не работает?
источник

SS

Slava Sokolovsky in Rust Beginners
Yevhen Kazmin
то есть способ с MaubyUninit не работает?
Ну а как программа может статически в бинаре выделить неопределённый кусок данных?
источник

SS

Slava Sokolovsky in Rust Beginners
Тебе нужно убрать assume_init и работать с массивом так, словно там внутри есть MaybeUninit (и это логично, ведь там куски памят, которые могут быть и не заполнены)
источник

SS

Slava Sokolovsky in Rust Beginners
Либо, если хочешь как-то заполнить, то тебе нужно заполнить чем-то массив. Ну, например, дефолтными значениями
источник

YK

Yevhen Kazmin in Rust Beginners
Slava Sokolovsky
Либо, если хочешь как-то заполнить, то тебе нужно заполнить чем-то массив. Ну, например, дефолтными значениями
хорошо, а что делать с циклом?
источник

YK

Yevhen Kazmin in Rust Beginners
оно тоже не разрешает в константе его использовать
источник

SS

Slava Sokolovsky in Rust Beginners
Yevhen Kazmin
хорошо, а что делать с циклом?
А там что?
источник

YK

Yevhen Kazmin in Rust Beginners
Slava Sokolovsky
А там что?
источник

SS

Slava Sokolovsky in Rust Beginners
Хм
источник

SS

Slava Sokolovsky in Rust Beginners
По идее, цикл по константе это константа
У тебя TTTAData::new это const fn?
источник

YK

Yevhen Kazmin in Rust Beginners
Slava Sokolovsky
По идее, цикл по константе это константа
У тебя TTTAData::new это const fn?
нет
источник

SS

Slava Sokolovsky in Rust Beginners
Ну вот и ответ - функция, не отмеченная как константная, не может быть выполнена на этапе компиляции
источник

YK

Yevhen Kazmin in Rust Beginners
Slava Sokolovsky
Ну вот и ответ - функция, не отмеченная как константная, не может быть выполнена на этапе компиляции
так у меня цикл не работает
источник

YK

Yevhen Kazmin in Rust Beginners
Slava Sokolovsky
Ну вот и ответ - функция, не отмеченная как константная, не может быть выполнена на этапе компиляции
источник

SS

Slava Sokolovsky in Rust Beginners
Та же ошибка?
источник