Я искал в Переполнении стека способы установки значений в объявленной изменяемой структуре.Ответы не выглядели однозначно, и для меня они слишком далеко отошли от простоты, которой я наслаждаюсь.В конечном итоге я обнаружил, что этот код работает так, как нужно:
struct FooStruct {
bar: i32,
}
impl FooStruct {
fn set(&mut self, val: i32){
//*self.first_name_mut() = val;
*(&mut self.bar) = val;
}
}
fn main() {
let mut k = 45;
let mut my_person = FooStruct { bar: 2};
println!("Fn: {}", my_person.bar);
my_person.set(k);
println!("Fn: {}", my_person.bar); //value is printed as 45
k = 33; // set k-value
println!("Fn: {}", my_person.bar); //the value in the struct remains as 45, unchanged
}
Обратите внимание, насколько просто реализовать сеттер:
*(&mut self.bar) = val;
Мой вопрос: есть ли ловушка?к этой простоте установки значения?Люди зашли так далеко, что создали макросы для получения / установки, поэтому мне интересно, почему этот метод не используется.Я пришел из Java-земли, где настройка - это бессмысленная сделка (this.value = input);по прибытии туда, где живут рустики, я ожидал, что реализация функций, подобных ООП, будет неприятной для реализации.
Хотя я надеюсь, что этот пост поможет людям реализовать сеттер, я также хочу, чтобы опытный пользователь объяснил, что за строка кода вышеделает так же, как и любые подводные камни, которые я (возможно, еще) не видел.