3 ms·
Another big area that is lacking is Go makes it so hard if you want to use something other than a primitive as a hash key (Rust is guilty of this as well, mind
by sam0x17 4y ago
Another big area that is lacking is Go makes it so hard if you want to use something other than a primitive as a hash key (Rust is guilty of this as well, mind you). This is something that should come out of the box in any modern language in my opinion.
- yencabulator 4y agoThe map key type can be anything for which `==` is defined. This includes structs for which `==` is defined for every field. Composite keys etc are trivial. https://go.dev/ref/spec#Map_types https://go.dev/ref/spec#Map_types
- the_duke 4y ago> Rust is guilty of this as well, mind you #[derive(Hash)] struct X{ ... } Seems easy enough to me? The only annoyance is if a third party type didn't implement Hash, but you can solve that with a manual implementation instead of a derive.
- stonewareslord 4y ago> you can solve that with a manual implementation instead of a derive. How? I thought the orphan rule said you can only define trait implantations at struct definition or trait definition
- sam0x17 4y agoding ding ding! This has been a problem for me a number of times. The quick workaround is pray that it implements Debug and in a reasonable way and take the hash of the string instead
- the_duke 4y agoYeah, for foreign types you will have to use the "newtype" pattern, aka: define your own wrapper struct.
- genthor 4y agoMaybe I misunderstood you, but you can use structs as keys of a map.
- sam0x17 4y agonot if it doesn't have equailty defined. Then you have to define it. Oh, and it's an AST node someone at X company wrote and there are 100+ node types. Have fun! In crystal there is a reasonable data-based default hash implementation that you can just rely on.