shahryarjb

shahryarjb

How to create a macro like def

Hello, I try to create a custom macro to implement some functions and structure I need in my project and my goal is to make a custom tools which is created by macro.

Please see my macro

delete_list_item(:roles, DeleteErrorComponent, false, do: fn x ->
    IO.inspect(x)
  end, before: fn x -> IO.inspect(x) end)

This Syntax is not good for me and I need a macro like this:

admin_ui delete_list_item(:roles, DeleteErrorComponent, false) do 
  call_function1
  call_function2
  call_function3
  or a block code
  
before
  call_function1
  call_function2
  call_function3
  or a block code
end

My problems

  • I couldn’t run all functions, then I use anonymous function.
  • I couldn’t create a starter like admin_ui like def macro (def somthing)
  • I should write a comma to run before but I need this like top code

I saw this link: elixir/lib/elixir/lib/kernel.ex at v1.12.3 · elixir-lang/elixir · GitHub

But I couldn’t understand all of them, I’m trying to figure out how elixir kernel did this

Thanks

Most Liked

al2o3cr

al2o3cr

The keywords that introduce block-like constructs (do, after, else, rescue, catch) are special-cased in the tokenizer:
https://github.com/elixir-lang/elixir/blob/74bfab8ee271e53d24cb0012b5db1e2a931e0470/lib/elixir/src/elixir_tokenizer.erl#L1348-L1351

so adding additional ones like before in your example is impossible, short of modifying the language source.

Where Next?

Popular in Questions Top

nobody
Hi! In PHP: $_SERVER[‘SERVER_ADDR’] - in Elixir? Searched the docs for ip address and the web, no good results. Thanks!
New
jononomo
I am trying to figure out how Mix knows whether the environment is test, dev, or prod – where is this set? Thanks.
New
jononomo
For some reason my phoenix channels are working for me in my local dev environment, but as soon as I deploy via Docker, I get a 403 error...
New
Lily
In templates/appointment/index.html.eex: <%= for appointment <- @appointments do %> <tr> <td><%= appoi...
New
sen
Hi All, I set a environment variables in dev.exs , like below code. when i start server, how can i set the ${enable} value? thanks. d...
New
fayddelight
I tried installing elixir 1.11.2 erlang 23.3.4 via asdf in my zsh shell. Enabled the versions locally and globally. When I list them ...
New
JorisKok
I have a server on AWS, and was running a load test using artillery. When looking at the Phoenix dashboard I see the Ports going to 100% ...
New

Other popular topics Top

vertexbuffer
Hello, can anybody help here..? I have a list of players and I what to delete an element, but every for loop the list is reverting to ori...
New
Darmani72
If I have a post route which an argument: post /my_post_route/:my_param1, MyController.my_post_handler How would get the post params ...
New
aadeshere1
I have a another noob question about loop. Since elixir is immutable, while loop is not directly possible. total = 10 while total != 0 ...
New
greenz1
I have a phoenix application from which a user can download multiple(5-6) files of size 1MB. I couldn’t find anything related to sending ...
New
sen
Hi All, I set a environment variables in dev.exs , like below code. when i start server, how can i set the ${enable} value? thanks. d...
New
dblack
I’ve got an issue with an app and I’ve no idea of how to troubleshoot it. I’m hoping someone here might have seen something similar. I p...
New

We're in Beta

About us Mission Statement