Sebb
I just tried to create a struct without fields (because: why not?).
It’s not possible with defstruct, which insists on an argument.
Best it can do is
defstruct _: nil # nice
btw, this is not OK:
defstruct [_]
isn’t that inconsistent?
So I tried to figure out what defstruct does. From the docs:
To define a struct, a developer must define both
__struct__/0and__struct__/1functions.defstruct/1is a convenience macro which defines such functions with some conveniences.
Where are __struct__/x documented?
Structs are usually defined with the
Kernel.defstruct/1macro
What if I want to be unusual? How can I define a struct by hand, maybe even without fields?
Trending in Questions
I’m working on a project that simulates the bumbl example in the programming phoenix book. It acts almost like an email client. We have a...
New
Hello!
Could someone please give me a help/sample code, how to delete a file from s3 using waffle/waffle_ecto from Phoenix app.
I creat...
New
I’m seeing that a list inside a Kino.DataTable will be interpreted as a charlist, even if the Kino.configure() is set to charlists: :as_l...
New
So my question is quite simple and i have found no conclusive answer on forum, google or AI.
Should we use :erlang.float for Integer to ...
New
Hi, I’ve just set up an application with ash_authentication. There is only magic link strategy for now, so there is no confirmation add o...
New
If a change or preparation module uses Ash.Changeset.get_argument/2 or Ash.Query.get_argument/2 (or any of the other get_argument functio...
New
I’m trying to set up Emacs with elixir-ls via lsp-mode and credo via Flycheck. This should mostly be preconfigured as Flycheck picks up c...
New
Other Trending Topics
I am happy to introduce the very α version of the new programming language compiled to BEAM.
Welcome Cure.
It has literally three kille...
New
Hobbes is a low-level distributed database for the Elixir programming language.
Hobbes provides a simple, safe, and scalable storage lay...
New
Hi there! We created Gust: A task orchestrator inspired by Airflow.
For those who have never heard about Aiflow, it’s a Python-based wor...
New
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New
Xamal is a deployment tool for Elixir apps that deploys native releases to bare metal servers over SSH. It’s a port of GitHub - basecamp/...
New
Hello everyone. After busy few months I am happy to announce v0.1.0 of Emerge & Solve.
They are GUI (Emerge) and State management (S...
New
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #library
- #deployment
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #elixirconf
- #channels
- #exunit
- #discussion
- #code-sync
- #podcasts
- #javascript
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #blog-post
- #elixirconf-us
- #elixir-ls
- #ai
- #phoenix_html
- #iex
- #graphql
- #genstage
- #websockets
- #supervisor
- #advent-of-code
- #distillery
- #processes
- #api
- #forms
- #hex
- #security
- #metaprogramming










Showing Posts 1 to 7- Show Best Posts
- Show All (oldest first)
- Show All (newest first)
dimitarvp
…but what’s your goal?
Sebb
to create a struct without fields
Actually I really think I have a use case, but the main point is: just being curious.
NobbZ
Using an empty list as argument to
defstruct/1works for me:sheharyarn
Like @Nobbz said, you can just do this:
The reason this doesn’t work is that you cannot assign
_. The first example works because:_is not_, so you can dodefstruct [:_]which is equivalent to your first example.This is the macro that’s called underneath when defining a new struct. Going over the definition should help you better understand manually defining a struct in a module.
daskycodes
One way to define a struct is to use a simple map with the
__struct__keyLet’s say we have a module
StructWithoutFieldswe could call
This will be a struct but we won’t be able to call
%StructWithoutFields{}The next step I’d suggest is looking into the macro implementation like @sheharyarn suggested.
I left a lot of parts out in the following example but this might give you an idea
With that module you will already be able to call
If you haven’t read it yet I can really recommend reading Metaprogramming Elixir: Write Less Code, Get More Done (and Have Fun!) by Chris McCord
It goes into a lot of detail on how macros work and how basically a lot of elixir is build upon macros
Sebb
thanks for the great advice, can’t fully understand the
defstruct-macro yet, but I’ll take a look at the book. (feeling a little too stupid for that right now, not having thought aboutdefstruct []).aiwaiwa
One legitimate reason would be to implement a protocol without data.
Use case: postgrex/lib/postgrex/parameters.ex at v0.16.5 · elixir-ecto/postgrex · GitHub