Вы можете использовать признаки Index
и IndexMut
.
use std::ops::{Index, IndexMut};
struct Foo { x: i32, y: i32 }
impl<'a> Index<&'a str> for Foo {
type Output = i32;
fn index(&self, s: &&'a str) -> &i32 { // '
match *s {
"x" => &self.x,
"y" => &self.y,
_ => panic!("unknown field: {}", s)
}
}
}
impl<'a> IndexMut<&'a str> for Foo {
type Output = i32;
fn index_mut(&mut self, s: &&'a str) -> &mut i32 { // '
match *s {
"x" => &mut self.x,
"y" => &mut self.y,
_ => panic!("unknown field: {}", s)
}
}
}
fn main() {
let mut foo = Foo {
x: 0,
y: 0,
};
foo["y"] += 2;
println!("x: {}", foo["x"]);
println!("y: {}", foo["y"]);
}
Он печатает:
x: 0
y: 2
может быть отвечающими в состоянии дать более конкретные примеры, если вы объясните, что вы хотите 's [ "что-то"] = 533' до * до *. В противном случае мы просто сможем показать вам синтаксис и черты, которые вам нужно реализовать. – Shepmaster
@Shepmaster, вы не понимаете, что '' что-то '' = 533' делает? –
Недостаточно контекста, чтобы убедиться, что вы хотите. Он имеет возможность делать * все, что может сделать Rust * (запись файла, отправка данных по сети, 'panic'ing и т. Д.) До тех пор, пока в конце он возвращает изменчивую ссылку на интегральную переменную (и это не так ясно, если вы хотите 16-, 32- или 64-битное значение, но это просто педантично). – Shepmaster