Size: a a a

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

2020 March 24

ph

pl 🦑 hk in Rust — русскоговорящее сообществo
struct MySuperObject<T>(Vec<T>);

impl<T> MySuperObject<T> {
fn get(&self) -> &T {
 &self.0[0]
}
источник

YK

Yevhen Kazmin in Rust — русскоговорящее сообществo
Иван Лещенко
Скинь ссылку на playground
у меня нет кода
источник

YK

Yevhen Kazmin in Rust — русскоговорящее сообществo
Вафель
struct Wrap(T)?

- приватное поле, может быть изменено только самим Wrap
- может раздавать ссылки на своё поле
Wrap
это в языке есть?
источник

Э

Эрик in Rust — русскоговорящее сообществo
pl 🦑 hk
struct MySuperObject<T>(Vec<T>);

impl<T> MySuperObject<T> {
fn get(&self) -> &T {
 &self.0[0]
}
А этот &T не заблокирует
fn set(&mut self, v: T);
? Просто вроде как часть вектора, а вектор - часть суперобъекта.
источник

В

Вафель in Rust — русскоговорящее сообществo
Yevhen Kazmin
Wrap
это в языке есть?
Это  название твоей структуры
источник

YK

Yevhen Kazmin in Rust — русскоговорящее сообществo
pl 🦑 hk
struct MySuperObject<T>(Vec<T>);

impl<T> MySuperObject<T> {
fn get(&self) -> &T {
 &self.0[0]
}
если я дам кому-то ссылку иммутабельную, то сам ведь менять не смогу потом
источник

В

Вафель in Rust — русскоговорящее сообществo
Эрик
А этот &T не заблокирует
fn set(&mut self, v: T);
? Просто вроде как часть вектора, а вектор - часть суперобъекта.
Заблокирует конечно
источник

Э

Эрик in Rust — русскоговорящее сообществo
Вафель
Заблокирует конечно
А ему надо чтобы не заблокировало. Но это очевидно ансейфом писать надо.
источник

В

Вафель in Rust — русскоговорящее сообществo
Yevhen Kazmin
если я дам кому-то ссылку иммутабельную, то сам ведь менять не смогу потом
Не сможешь пока снаружи будет ссылка, да. Нельзя менять данные на которые кто-то ссылается.
источник

YK

Yevhen Kazmin in Rust — русскоговорящее сообществo
я к тому, что может подобные кейсы в расте решаются особым подходом, паттерном?
источник

В

Вафель in Rust — русскоговорящее сообществo
Эрик
А ему надо чтобы не заблокировало. Но это очевидно ансейфом писать надо.
Ансейфом это очевидно писать нельзя, тут скорее точнее  определиться с задачей и  подобрать инструмент
источник

Э

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

В

Вафель in Rust — русскоговорящее сообществo
Yevhen Kazmin
я к тому, что может подобные кейсы в расте решаются особым подходом, паттерном?
Не очень понятна задача
источник

YK

Yevhen Kazmin in Rust — русскоговорящее сообществo
простой пример - есть главная нода,  у которой есть публичная функция, так же у главной ноды есть дочерние ноды, которые должны иногда вызывать эту публичную функцию для собственных нужд. Сама публичная функция зависит от приватных полей главной ноды, эти поля меняются в процессе работы программы
источник

В

Вафель in Rust — русскоговорящее сообществo
Вафель
Не сможешь пока снаружи будет ссылка, да. Нельзя менять данные на которые кто-то ссылается.
А если очень хочется,  придётся обмазываться чем-то с interior mutability. Например можно наверное сделать кастомный враппер над RwLock
источник

Э

Эрик in Rust — русскоговорящее сообществo
Yevhen Kazmin
простой пример - есть главная нода,  у которой есть публичная функция, так же у главной ноды есть дочерние ноды, которые должны иногда вызывать эту публичную функцию для собственных нужд. Сама публичная функция зависит от приватных полей главной ноды, эти поля меняются в процессе работы программы
Ансейф очевидный. Ну или обмазывайся Arc<мутексами>.
источник

YK

Yevhen Kazmin in Rust — русскоговорящее сообществo
очевидно решением будет не хранить ссылку на главную ноду, а получать при необходимости...
источник

YK

Yevhen Kazmin in Rust — русскоговорящее сообществo
Вафель
А если очень хочется,  придётся обмазываться чем-то с interior mutability. Например можно наверное сделать кастомный враппер над RwLock
я в процессе изучения языка еще дошел до таких сложностей
источник

YK

Yevhen Kazmin in Rust — русскоговорящее сообществo
просто пытаюсь понять как обычные задачи из других языков решить на расте
источник

YK

Yevhen Kazmin in Rust — русскоговорящее сообществo
чтоб преодолеть барьер и перейти на него для повсдевной нужды
источник