Так, я за компом. Починаємо з початку. Ви, схоже, чомусь дуже намагаєтеся економити власний час на описі проблеми - а це не веде до економії часу, бо нічого не зрозуміло (і передусім - вам).
Teg Miles написав:Є self змінна, що належить певній структурі.
self - це ключове слово, що позначає перший параметр методу (об'єкт, для якого метод викликаний). Яким чином окремий параметр може бути змінною, що належить певній структурі? У вас є змінна в структурі, що зветься r#self, щоб дозволити використання ключового слова як звичайного ідентифікатора? Чи не належить, а відноситься до типу, який є структурою? Чи ще щось?
Teg Miles написав:При побудові структури цій змінній надається початкове значення.
Ага, варіант з аргументом відпадає. Ви self побудувати не можете, він уже передається. Чи ви маєте на увазі, що десь колись цій змінній надається початкове значення, а у вашому коді треба із ним працювати? Тоді нащо про це писати? Очевидно, що змінна буде десь ініціалізована. Особливо в Rust, бо неініціалізована змінна - це помилка.
Teg Miles написав:Тоді за допомогою трейту .connect_changed,
Дуже дивна назва для трейту. У Rust трейти називаються ВерблюдячимРегістром, з великих літер і без підкреслення. Ви мали на увазі, що структура, про яку йде мова, реалізує трейт EditableSignals, в якому є метод connect_changed? Чи щось інше?
Teg Miles написав:Arc — це ж unsafe, хотілося б без нього обійтися.
І відколи ж це Arc став unsafe? Ні, там є кілька unsafe методів, але і в Vec є unsafe методи. Ви можете спокійно писати код з Arc без unsafe.