vrod
Is there a way to put more functions into __using__ block? It gets very long and hard to read. I cannot figure out how to split up the quote do into multiple functions. Is there a trick?
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
Hello,
I know there is an approach for handling lists that allows for optimized traversal, but I can’t recall the specific method (somet...
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
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
Corex is an accessible, unstyled UI component library for Phoenix that integrates Zag.js state machines using Vanilla JavaScript and Live...
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
- #ai
- #elixirconf-us
- #blog-post
- #elixir-ls
- #phoenix_html
- #iex
- #graphql
- #genstage
- #websockets
- #supervisor
- #advent-of-code
- #distillery
- #processes
- #api
- #forms
- #hex
- #security
- #metaprogramming










Showing Posts 8 to 1- Show Best Posts
- Show All (oldest first)
- Show All (newest first)
benwilson512
Yea I agree with @eksperimental here, this use of macros generally causes more trouble than it’s worth.
If you find yourself with functions that take too many arguments, consider creating a struct and then passing on that struct. For example:
Then you construct a
%SomeModule{}struct and it will take on the relevant defaults, and also provide a place to store other values you want to set. Then you can pass this to your various functions, and add extra arguments as appropriate.eksperimental
I would recommend against that. Be explicit and avoid magic.
Later you will loose understanding of what’ s going on with your code.
vrod
I have arguments passing in
use, soimportdoes not work (maybe there is a trick?). My purpose is to simplify many functions: when Iusewith arguments, I can make many functions in a module that are much more simpler. For instance instead ofsomething1(shared1, shared2, x, y),something2(shared1, shared2, x, y), …I can do
use Thing, shared1: "a", shared2: "b"and then have much simpler functions likesomething1(x, y)because the macro put the shared values where they are needed.The quote gets long with
@docespecially, so even if there is no complex logic in the functions and they are simple calls to some other functions like @benwilson512 says, it is helpful to organize things in smaller pieces sometimes. I hope that makes sensekip
If the only purpose of the
__using__macro is to define functions that have no dependency on macro arguments then I think justimport MyModuleis far clearer in intent and easier to maintain. I can’t tell if your use case fits this description though.Otherwise, as @benwilson512 says, the quoted code should do as little as possible and delegate to normal functions early for the same reasons as clear intent and maintainability.
eksperimental
I don’t know if I quiet understand your question, but you can put as many functions as you please inside the quote do block in using.
For instance:
And then
benwilson512
You can
@doc falsethose functions if you want to make it clear that they aren’t supposed to be used.vrod
I see, thank you. In your example, you end up having more public functions available, yes? I think sometimes this might make a problem?
benwilson512
@vrod I’ll start by saying: If this is a problem you’re running into, you are 100% putting too much inside of a
__using__block. Code inside of a using block should generally look like this:NOT
Doing it the first way will improve compile times, debugging ability, and avoid the problem you are running into.
BUT, to actually answer your question, you can do this;
Basically, return a list of
quote doblocks.