kalloc
не, я думал прежде чем раст выбрать
Vladimir
И перезапускать спокойно
Anton
Так, подскажите, как скастить Option<&mut T> к Option<&T>
Vladimir
Vladimir
Пыха, на сишке, да?
kalloc
да
kitsu
ага
Vladimir
Сериализация
Vladimir
Ну вот
Vladimir
Что и требовалось доказать си>руста
kalloc
быстрый шаблонизатор, да
Vladimir
Anton
mismatched types
Vladimir
Ну вообще x.map(|x|&*x)
Anton
expected type std::option::Option<&Player>
found type std::option::Option<&mut Player>
Vladimir
Ну или x.map(AsRef::as_ref)
Vladimir
Vladimir
Нас не обманишь
Vladimir
Мы на русте иногда пишем
Vladimir
А не только в чатике сидим
Anton
fn find_player(&mut self, socket: Rc<RefCell<ws::Sender>>) -> Option<&Player> {
self.all_players()
.find(|player| player.socket.as_ref() == Some(&socket))
}
Anton
Я не хочу mut возвращать)
Vladimir
А all_players что возвращает?
Anton
impl Iterator<Item = &mut Player>
Vladimir
Сделай map как я выше писал
Vladimir
Ну вообще x.map(|x|&*x)
Vladimir
Ну или x.map(AsRef::as_ref)
Anton
Ага, помогло
Anton
Но грустно)
kalloc
грустно
Vladimir
Ага, помогло
А вообще есть такой уговор в Русте - делать по два метода когда они возвращают что-то заимствующее:
1) без постфикса иммутабельный
2) с постфиксом _mut и мутабельныц
Vladimir
Тоесть тебе all_players разбить надо на две части
Vladimir
Тогда и сигнатура find_players поменяется &self
Anton
В принципе звучит разумно, думаю, я к этому и так пришёл бы в итоге
Anton
С другой стороны бойлерплейт выходит
Anton
Нельзя сделать дженерик по мутабельности?
Vladimir
Нет(
Anton
И RFC не было?
kitsu
странно что тип не выводится
Cat
дженерик определяет только тип
Anton
Cat
лайфтаймы часть типа
Vladimir
Но это было в "мыслях" создателя руста
Vladimir
Типа когда у него спросили что он думает будет в новых языках
Vladimir
Vladimir
Вот тебе поворот
Anton
Это из-за того, что тайпчекер и борроучекер — две разные системы?
Cat
Vladimir
эмм..
& и &mut разные типы, не?
Cat
да, я не совсем точно сказал, я имел в виду type parameters
Cat
Vladimir
Ну тогда лайфтайм всё-таки не type parametr
Cat
Vladimir
А lifetime parameters если быть уже занудой
Vladimir
Это немного разные сущности, лайфтайм не существует - это все выдумки руста
Vladimir
Короче по хорошему, могли б сделать генерики по мутабельности
Nikita
Тут кто-нибудь уже вкурил пропосал по Pin?
Маjко
Vladimir
Vladimir
Вроде так
Nikita
Vladimir
&mut X -> Pin<X> для не селфреферент
X -> Pin<X> для оных
Vladimir
Vladimir
Пока тип не селфрент
Nikita
Ага, то есть селфреференты предоставляют апишку для создания пинов
Vladimir
А не
Vladimir
Они вообще для селфрентов не существуют
Vladimir
Все ещё проще
Антон
Nikita
В том-то и дело, что они существуют для !Unpin
Vladimir
Тоесть дальше как я говорил