fireproofsocks
Overriding non-defoverridable functions generated by use macro?
Is there any way to override functions generated by a use macro when those functions have NOT been tagged as defoverridable?
I’m tapped into a 3rd party package which does mostly what we want, but we need to do some tweaking of the return values to make things work with our particular stack.
The easiest solution is of course to define our own variant of the function under a different name, e.g.
defmodule OurModule do
use Something
def something_alternate(opts \\ []) do
# custom stuff
something(opts)
end
end
But it’s a bummer to not be able to avail ourselves of the nice interface in the 3rd party package, so I was wondering if it would be possible to somehow override the functions that it generates.
For example, maybe we could roll our own defoverridable via something like this?
defmodule Wrapper do
defmacro __using__(opts) do
quote do
use Something
defoverridable Module.definitions_in(__MODULE__)
end
end
Curious if anyone has tried this or can offer words of wisdom before I try this out in the laboratory…
Most Liked
LostKobrakai
You can, and you don’t even need to wrap it in your own use. You can just put the defoverridable inline in the module where you need that.
fireproofsocks
Not sure I follow that – where exactly? If I do this:
defmodule OurModule do
use Something
defoverrideable something: 1
def something(opts \\ []) do
# custom stuff here
end
end
It gets a compilation warning:
warning: this clause for something/1 cannot match because a previous clause at line 5 always matches
path/to/file
Last Post!
fireproofsocks
Popular in Questions
Other popular 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
- #supervisor
- #elixirconf-us
- #advent-of-code
- #distillery
- #processes
- #forms
- #api
- #metaprogramming
- #hex
- #security









