Size: a a a

2019 February 05

ŹR

Źmićer Rubinštejn in pro.elixir
Там quote в корне должен быть
источник

ŹR

Źmićer Rubinštejn in pro.elixir
И он не должен ругаться на переменные «неиспользуемые»
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Потому что это не функция
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Я не уверен на 100, но вышенаписанный пример вообще не должен по идее работать
источник

AD

Anastasiya Dyachenko in pro.elixir
опустила quote, сейчас добавлю
defmacro macro(a, b, c) do
  if some_config_active? do
    quote do
      use(unquote(a), unquote(b), unquote(c))
    end
  else
     nil
  end
end
источник

AD

Anastasiya Dyachenko in pro.elixir
Źmićer Rubinštejn
И он не должен ругаться на переменные «неиспользуемые»
там где аргументы объявляются, там функция, и варнинги есть
источник

AD

Anastasiya Dyachenko in pro.elixir
вот полностью рабочий пример
defmodule A do
  defmacro macro(a, b, c) do
      if false do
         quote do
             unquote(a) + unquote(b) + unquote(c)
         end
      else
         nil
      end
    end
   
   def function(a, b, c) do
       a + b
       macro(a, b, c)
    end
end
источник

AD

Anastasiya Dyachenko in pro.elixir
Interactive Elixir (1.7.2) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)> defmodule A do
...(1)>    defmacro macro(a, b, c) do
...(1)>        if false do
...(1)>           quote do
...(1)>               unquote(a) + unquote(b) + unquote(c)
...(1)>           end
...(1)>        else
...(1)>           nil
...(1)>        end
...(1)>      end
...(1)>
...(1)>     def function(a, b, c) do
...(1)>         a + b
...(1)>         macro(a, b, c)
...(1)>      end
...(1)> end
warning: variable "c" is unused
 iex:12
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Ну макрос просто вставляет ast
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Все логично
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Переменная то не используется
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Значит надо делать макросы как-то по другому
источник

AD

Anastasiya Dyachenko in pro.elixir
Вопрос в том как красиво обойти, чтобы не ругался, может кто уже сталкивался
источник

ŹR

Źmićer Rubinštejn in pro.elixir
мне кажется это можно переписать без warning
источник

AD

Anastasiya Dyachenko in pro.elixir
Например?)
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Ну зависит от конкретного примера
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Всмысле от того что ты там делаешь
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Например можно в одном случае генерировать функцию, которая что-то делает, а в другом случае функцию которая ничего не делает
источник

ŹR

Źmićer Rubinštejn in pro.elixir
В отличие от «вообще не генерировать функцию»
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Ну т.е. перенести эти переменные как бы на другой уровень
источник