gearnode
Hello everyone !
How to reproduce
case Repo.one(Client) do
%Client{} = client -> client
nil -> {:error, "some error message"}
end
When Repo.one(Client) returns to me a %Client{...} struct it matches, no problem with that.
Now if I reverse this match operation.
case Repo.one(Client) do
client = %Client{} -> client
nil -> {:error, "some error message"}
end
When Repo.one(Client) returns to me a %Client{...} struct, I expect it matches and returns new empty %Client{} struct. But this returns same result as the first example.
Troubleshooting
I don’t understand how Elixir resolve this match. I have tried to reproduce this in a IEx outside a case context, without any success.
Anybody know if this behavior is valid ? And how Elixir resolve this context and condition ?
Thanks,
Bryan!
Trending in Questions
Hello!
Suppose you are building workflow (order / task / payment) processing system with the following requirements:
Each workflow con...
New
I’m aware of 2 such projects, are there others?
git: GitHub - team-alembic/realworld: A fullstack Phoenix LiveView application with back...
New
Hi everyone.
My team and I have been working on a fairly modest app based around video streaming and chat, but we’ve landed a customer t...
New
I really like the adapter patterns that ecto, nebulex, waffle, etc. use and would love find something similar for a key management servic...
New
Hello folks!
So at work, we are seeing some situations where we have to define some “fixed” strings that are used across the codebase in...
New
How Can I Optimise Compile Time Dependencies
I have been building an elixir application for about 2 years now. Many modules and files ha...
New
Hi,
we run different LLM models across a cluster, with each node loading a configurable subset. Model-specific queues let nodes consume ...
New
Other Trending Topics
I fully migrated to my own harness from Anthropic/Gemini and I think it’s time to share it. Welcome DSH, the DeepSeek Harness, fully writ...
New
Hey. Is there anyone here who creates agents in their apps? Not talking about using agents, but creating them. I’m finding it pretty diff...
New
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New
There has been a thread to discuss the Stack Overflow Developer Survey on this forum every year since 2018, so here’s yet another one for...
New
With AI doing more of the implementation work, I’ve been wondering how much coding I should deliberately keep doing myself.
My main conc...
New
I love Elixir. It’s one of 2 programming languages I’ve ever fallen in love with.
But I don’t use it anymore.
Serverless was the promis...
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
- #ai
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #blog-post
- #elixirconf-us
- #elixir-ls
- #phoenix_html
- #iex
- #graphql
- #genstage
- #websockets
- #supervisor
- #advent-of-code
- #distillery
- #processes
- #elixirconf-eu
- #api
- #forms
- #security
- #hex










Showing Posts 1 to 2- Show Best Posts
- Show All (oldest first)
- Show All (newest first)
Qqwy
The reason this works is because how
%Struct{}(and, more generally, any kind of map:%{}) matches.The idea is that, for structs and maps, you often are only interested in one or a few of the fields. Therefore, matching
%{foo: _}will match any map that has a key:foo. Likewise,%{}will match any map at all.When not matching but constructing a value, then, yes,
%{}means ‘empty map’ and%Client{}means ‘empty client (whose struct fields are set to their defaults)’.The order in which
=is used (i.e. which side contains the structure to match, and which side contains the name to bind the matched part to) inside a match does not matter. Some people prefer to do it in front, (client = %Client{}), some in the back (%Client{} = client). Both mean the same.To change your code so it returns a new client, write this:
benwilson512
You aren’t reversing the match operation, because matches do not have an order. WITHIN a match
foo = baris exactly the same asbar = foo. Specifically,is in no way whatsoever different than
This is true of every match. So for example:
The right hand most
=is necessary in order to establish that the left hand side is a match, but once you’re within a match order does not matter.