Loyd
Потому что ты пытаешься в ооп
Anton
так что если controller это Trait c get_a , get_b, я вас поздравляю
Loyd
Ты пришёл в другой язык, с другой парадигмой. А теперь ноешь, что здесь не так, как ты привык
Loyd
Понять, как работает борроу чекер ты не хочешь
Anton
не борровить весь объект, если нам нужно одно поле
Anton
Какой функции?
Loyd
Понять, в чём проблема с твоим подходом ты тоже не хочешь
Anton
он работает тупо
Anton
крайне тупо
Loyd
Да, потому что ты его не понимаешь
Anton
если мы хотим борровить поле через геттер, то он блокирует всю структуру
Anton
он тупой как палка
Loyd
Ты пошёл и допустил ошибку в методе get_b и стал возвращать get_a
Loyd
И всё нахуй наебнулось
Loyd
понимаешь?
Anonymous
я не понимаю все эти сообщения называющие его тупым
Anton
а вот борровить поля структуры напрямую он позволяет. А через геттеры нет
Anton
какую ошибку?
Anton
Ты пошёл и допустил ошибку в методе get_b и стал возвращать get_a
Anonymous
ты хочешь чтобы в борроу чекер добавляли специальные кейсы которые не соответствуют логике потому что тебе так привычнее
Loyd
Anton
Я устал уже писать. если не понятно, то перечитайте мои сообщения
Loyd
Он хочет, чтобы было
get_a(&mut self.a) -> &mut Vec
Loyd
Нам-то как раз понятно
Loyd
Понятно, что ты не можешь в архитектуру
Loyd
И что читать ты тоже не умеешь
Loyd
Ты просто хочешь написать на расте код на крестах
Mark
язык А тупой потому что нельзя сделать как в языке В
Mark
забавно
Anton
стоп, а (&mut self.a) можно писать?
Loyd
Anton
ну вот
Loyd
Ты хочешь расширить синтаксис, чтобы показать компилятору что-то
Anonymous
unsafe {}
Anton
чет вы меня вообще не понимаете... Напиши, как ты понимаешь мои сообщения
Loyd
ну вот
Вариантов у тебя несколько. Либо unsafe и будет как в твоих крестах
Loyd
Либо уже достать голову из ж
Anton
самый простой пример
Mark
Anton
те в опред промежуток времени в одном { } адреса полей контроллера не меняются, почему мы не можем обращаться к ним по отдельности через geter-ы ? например, я делаю поля camera и cursor приватным, и делаю &mut setter-ый. Я изменяю контроллер откуда-то, где, например let mut controller=Controller::new(); Почему я не могу controller.get_camera().x=controller.get_sursor().x ?
Anton
Треды это другое дело. у нас однопоточный код и мы просто делаем
let mut controller=Controller::new();
controller.get_camera().x=controller.get_sursor().x;
Borrow-checker-у это не понравится..
Loyd
xd. Кончай )
Anonymous
весь код в unsafe если писать как плюсовик
Bugworm
как я понял это старый добрый срач об mutability vs uniqueness
Anonymous
но людей нужно переучивать
Loyd
Mark
https://play.rust-lang.org/
Loyd
Компилятор работает на уровне сигнатур
Anton
вот-вот, заставляет через ансейф обманывать боров чекер
Anton
ну вот да, раст! безопасность! А в итогде весь код в unsafe!
Loyd
Он знать не знает, что ты там внутри в отдельный байтик залес
Loyd
И в сигнатуре у тебя чёрным по белому: я забрал self
Anonymous
Anton
что тут такого опасного?
Anton
почему
s.a=3;
s.b=4;
можно
а
let a=s.get_a()
let b=s.get_b()
*a=3;
*b=4;
нельзя? Какой тут *ть датарейс? Тут всё нормально
Loyd
get_b вернул a
Loyd
что дальше?
Anton
да, а я хочу забрать лишь поле .a, доступ к которому напрямую не имею. Что предлагает раст?
Anton
И в сигнатуре у тебя чёрным по белому: я забрал self
Loyd
(ну, тут ничего, но с массивами веселее)
Anonymous
Anton
let a=s.get_a()
let b=s.get_b()
*a=3;
*b=4;
поэтому этот код не будет работать. хотя get_a делает то же самое, что &mut s.a
Anton
точнее не будет компилится, хоть он и правильный
Loyd
Мне кажется, тебе лучше не писать на чём-то, кроме крестов
Loyd
Ты не способен воспринимать новое
Loyd
Закапывайте.
Anton
И что вы предлагаете мне взамен?
Anton
у меня есть трейт сервер, имеющий поля. ПОЧЕМУ Б-ть я не могу присваивать ему поля в ОДНОМ {} ?
Loyd
Ну, тут скорее не система типов, а бороу правила.
Loyd
С т.з. типов всё ок
Anton
Почему я не могу читать одни его поля и присваивать другим?
Loo
почему он не в функциональном стиле блять пишет
Loo
ВАХАХА
Anton
да причем тут ФП
Anton
напишите мне трейт сервер, который даёт &mut поля
Loyd
да причем тут ФП
Потому что твои потуги сродни попыткам писать императивный код в чисто функциональном языке
Anton
и попробуйте им затем воспользоваться
Loyd
Anton
Раст функциональный? ахахах