user974881
DETS keypos option to store a struct
Hello,
I’m trying to use DETS to store a struct, so I know that for this, I need to use the keypos option to tell elixir where it should get the key, so it’s value would be #struct.key, but in elixir, I don’t know how to do it.
I have tried :key, %Struct.key, %Struct[}.key, #struct.key and also without keypos, but none have worked.
How do I use DETS to store a struct? I have also checked in Elixir’s source code and documentation but haven’t found it, I guess this is because it comes from erlang.
Marked As Solved
al2o3cr
The #record.key syntax is for records; Elixir structs are not records, they are maps.
DETS stores tuples, so records fit naturally.
You’ll need to either produce a tuple from your struct, so that %SomeStruct{key: 123} is stored as {123, %SomeStruct{key: 123}} or transform the struct to a record (see the Record docs for some Elixir helpers).
One possible gotcha: for the “convert to a record” case, I don’t see a clear Elixir equivalent to #record.key to get a tuple position from a field name ![]()
Edit: thanks to @lud for calling out what I totally skimmed past - if you said defrecord :user, ... then user(:some_field) is the zero-based index of some_field in the record. That will work as-is if you want to access the field with Kernel#elem, but you’ll need to explicitly add one if you pass it to ETS as keypos (which expects a 1-based index!).
Last Post!
lud
Trending in Questions
Other Trending Topics
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #channels
- #elixirconf
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #phoenix_html
- #iex
- #blog-post
- #graphql
- #genstage
- #ai
- #websockets
- #elixirconf-us
- #supervisor
- #advent-of-code
- #distillery
- #processes
- #api
- #forms
- #metaprogramming
- #security
- #hex









