mguimas

mguimas

Import and macro conflict

Hello.

Suppose we have a file with this code

import ImportMe

defmodule AModule do
  use UseMe
end

where the modules above are defined in another file like this

defmodule ImportMe do
  def bar, do: :ok
end

defmodule UseMe do
  defmacro __using__(_opts) do
    quote do
      def foo, do: bar()
      def bar(), do: :ok
    end
  end
end

The compilation of these two files produces the imported ImportMe.bar/0 conflicts with local function error in the first file.

Is this something that should be reported as a bug or not?

Thanks

Most Liked

LostKobrakai

LostKobrakai

Why would it be a bug? You clearly have two functions named bar available in the same scope. What if you change the order of your functions to:

def bar(), do: :ok
def foo, do: bar()

What should is call in that case? It’s not clear.

LostKobrakai

LostKobrakai

I’m not really sure how this is related to macros at all. You have two different functions named the same in the same scope. That’s not going to work well. The compiler cannot decide for you which of the two ones it’s supposed to call. How those named functions ended up in the same scope shouldn’t make any difference.

NobbZ

NobbZ

When you are in AModule, there is no difference between bar and AModule.bar.

Just cope with it. Calling a macro is the same as copy and pasting code into your file. If you do not want a function f generated, then do not call the macro.

If you do not want to import a function g, then :exclude it from the import list.

That aside, I have a very strict opinion about libraries narrowing my own available namespace by dumping arbitrary functions into my module. But I think we already argued about this a lot in the slack…

Where Next?

Popular in Questions Top

openscript
Hello! Sorry for this astonishing simple question, but I’m really stuck. I try to set up the intellij-elixir plugin, but I don’t know ho...
New
jerry
Good day to you all. I have been struggling to get a query involving like and ilike to work. Can anyone assist me on this, please? pro...
New
tduccuong
Hi, is there any work on GUI with Elixir, that is similar to Electron/Javascript? My idea is to bundle Phoenix and BEAM into a single se...
New
Harrisonl
We have an ECS cluster with 4 services, where each task joins a single cluster, via discovery ECS discovery service. Currently when I de...
New
sacepums
Hey guys. I'm new to elixir and im really stocked about it. But I ran into a bit of problem - I need to convert a date sting, for examp...
New
chensan
I have a User schema with a :from_id field set to type :string: defmodule TweetBot.Repo.Migrations.CreateUsers do use Ecto.Migration ...
New
qwerescape
Is there a way to get the call stack or stack trace at any point in the code? Not from exceptions, but an expression that returns how the...
New
gonzofish
I’m currently trying to understand how to join three tables using Ecto. All the examples I’ve seen use 2, so maybe I’m just missing somet...
New
vonH
When I run the Plug and I recompile I wind up having to use Ctrl C to quit iex and start again. Witht the help of rlwrap I can use the cu...
New
johnnyicon
Hi all, I've just started learning Elixir and Phoenix Framework, so please pardon my n00bness at this stage. I'm trying to use Postg...
New

Other popular topics Top

Brian
What is the proper way to load a module from a file in to IEX? In the python world, doing something like this pretty standard: from ....
New
gshaw
What is the idiomatic way of matching for not nil in Elixir? E.g., First way: defp halt_if_not_signed_in(conn, signed_in_account) when...
New
joaquinalcerro
Hi there, I am working with Ecto-Postgresql and I need to call all of the records from a specific table but the table has 40,000 record...
New
Jim
As a follow up to my earlier question: I have the code compiling and running but not getting a successful login from the rest server. ...
New
vac
Hi, I'm quite new in Elixir and I'm trying to format a string to a PEM format. I have the certificate value like MIIDBTCCAe2...... and ...
New
danschultzer
None of the current solutions worked well for me, so I went ahead and built a user management system from scratch. This project took far...
548 27727 240
New
baxterw3b
Hi guys, i’m new in the Elixir world, and i have to say, that i love it! i’m having some problem to understand anonymous functions with ...
New
chrisalley
ExUnit now has describe blocks which is a welcome addition coming from RSpec. In the docs, it states that nested hierarchies of describe ...
New
romenigld
I am trying to run a deploy with docker and I successfully runned with this command: docker build -t romenigld/blog-prod . but when I t...
New
aesmail
Hello guys, I have finally made it. I created an admin interface for a framework. It’s been on my todo list for years and with the curre...
New

We're in Beta

About us Mission Statement