|
|
|
|
|
by Manishearth
3505 days ago
|
|
> Tagged structs are not meaningfully less type safe than interfaces. Of course they are. What if you read from or write to the wrong field? > Use an enum for the tag Your example has one contained type per variant. In Rust it is common to have an enum like enum Foo {
Variant1(String, u8, Vec<u8>),
Variant2(u8),
Variant3(String),
Variant4(f32),
Variant6(f32)
Variant5(bool, bool, String)
}
Naming tags for something like this would be hard. Some of the fields would be shared between variants. Some would not. |
|
This falls under the rubric of "not meaningfully less type safe". This data structure is central in a large project of mine, and I have maybe 3 places where I switch on the type flag. I'm not proposing this as a general purpose replacement for interfaces, only a useful way to abstract over a few known types when you can't afford all of the allocs.
> Your example has one contained type per variant. In Rust it is common to have an enum like enum Foo { Variant1(String, u8, Vec<u8>), Variant2(u8), Variant3(String), Variant4(f32), Variant6(f32) Variant5(bool, bool, String) }
I agree. I don't propose this as a general purpose replacement for Rust's enums.