Size: a a a

Rust — русскоговорящее сообществo

2020 March 24

AZ

Alex Zhukovsky in Rust — русскоговорящее сообществo
polunin.ai
хм, у меня есть Arena, и у меня есть несколько Vec<&mut T>, ссылки на арену. я могу как-то деструктуризировать арену чтобы у меня вышли Vec<T> по этим ссылкам?
то что ты хочешь скорее всего называется HList
источник

AZ

Alex Zhukovsky in Rust — русскоговорящее сообществo
потому что лайтаймы это штука на уровне типов
источник

p

polunin.ai in Rust — русскоговорящее сообществo
да я уже понял что я хочу чего-то очень странного. сейчас переделаю на Rc<RefCell<>> все
источник

Э

Эрик in Rust — русскоговорящее сообществo
Вообще, если есть возможность, намного проще сделать итератор, а не непрерывный Vec<T>.
источник

Э

Эрик in Rust — русскоговорящее сообществo
polunin.ai
да я уже понял что я хочу чего-то очень странного. сейчас переделаю на Rc<RefCell<>> все
Так, алоу, блет, я тут уже хочу писать сортировку, а ты решил пойти простым путём?
источник

Э

Эрик in Rust — русскоговорящее сообществo
Что это за нелюбовь к ансейфу? Ансейф - наше всё!
источник

p

polunin.ai in Rust — русскоговорящее сообществo
у меня все настолько сложно и запутанно, что не хватает только ансейфов в кучу. лучше попробую упростить
источник

Э

Эрик in Rust — русскоговорящее сообществo
Ну да, а также занять кучу лишней памяти счётчиками ссылок и заставить процессор обрабатывать кучу лишних инструкций.
источник

p

polunin.ai in Rust — русскоговорящее сообществo
главное что это проще намного
источник

Э

Эрик in Rust — русскоговорящее сообществo
Так тебе точно нужен именно Vec<T>? Итератора не хватит?
источник

p

polunin.ai in Rust — русскоговорящее сообществo
Эрик
Так тебе точно нужен именно Vec<T>? Итератора не хватит?
мне нужно несколько Vec<T>
источник

Э

Эрик in Rust — русскоговорящее сообществo
А зачем? Если обойтись итератором нельзя, то хоть скажи, почему.
источник

AZ

Alex Zhukovsky in Rust — русскоговорящее сообществo
Вопрос, почему вот в этом коде вывод типов работает:

pub fn bar(f: impl Fn(usize, usize) -> usize) {
}

pub fn mai() {
   let arr = vec![vec![3;10];10];
   bar(|i,j| arr[i][j]);
}

А если обернуть в опшн то уже нет?

pub fn bar(f: Option<impl Fn(usize, usize) -> usize>) {
}

pub fn mai() {
   let arr = vec![vec![3;10];10];
   bar(Some(|i,j| arr[i][j]));
}
источник

Э

Эрик in Rust — русскоговорящее сообществo
Alex Zhukovsky
Вопрос, почему вот в этом коде вывод типов работает:

pub fn bar(f: impl Fn(usize, usize) -> usize) {
}

pub fn mai() {
   let arr = vec![vec![3;10];10];
   bar(|i,j| arr[i][j]);
}

А если обернуть в опшн то уже нет?

pub fn bar(f: Option<impl Fn(usize, usize) -> usize>) {
}

pub fn mai() {
   let arr = vec![vec![3;10];10];
   bar(Some(|i,j| arr[i][j]));
}
internals of Rust
источник

p

polunin.ai in Rust — русскоговорящее сообществo
если у меня два Rc<RefCell<T>>, я могу сделать на одном into_inner() ? Или обязательно нужно дропнуть второй?
источник

Э

Эрик in Rust — русскоговорящее сообществo
polunin.ai
если у меня два Rc<RefCell<T>>, я могу сделать на одном into_inner() ? Или обязательно нужно дропнуть второй?
into_inner(self)
источник

Э

Эрик in Rust — русскоговорящее сообществo
Только если второй - weak.
источник

p

polunin.ai in Rust — русскоговорящее сообществo
weak это &T?
источник

Э

Эрик in Rust — русскоговорящее сообществo
weak - это Weak<T>. Почитай std::rc модуль.
источник

А⚙

Антон ⚙️ in Rust — русскоговорящее сообществo
Эрик
У меня один раз был Vec<String>, который умирал самым последним и только push'ился, я [&str; 10] из него только ансейфом достать смог, хотя сами стринги очевидно не меняются и ссылки на них умирают до самих стрингов.
Вангую, что сделал неправильно
источник