169 похожих чатов

А как можно передать аргумент в dataloader child’s callback в

graphql?

Или может можно передать контекст в виде резолвера с которого поступил вызов?

callback: fn data, parent, args -> … end

8 ответов

17 просмотров

можно сделать макрос типа такого defmacro with_context(resolver) do quote do resolve fn args, context -> unquote(resolver).(Map.put(args, :context, context), context) end end end object :user do resolve with_context(dataloader(User)) end

Bogdan- Автор вопроса
Максим Мартынов
можно сделать макрос типа такого defmacro with_co...

спасибо, но блин к сожалению макросы для меня темный лес. Все не найду времени, чтобы в этом разобраться.

Bogdan
спасибо, но блин к сожалению макросы для меня темн...

Макросы 101 1. Код представлен в виде AST. То есть AST для x + 1 это {:+, [], [{:x, [], Elixir}, 1]} 2. То что между quote do и end — возвращается как AST. То есть iex> quote(do: 1 + 2) вернёт {:+, [], [1, 2]} 3. То что внутри unquote — вставляется в AST по значению То есть iex> x = 1 iex> quote(do: unquote(x) + 2) {:+, [], [1, 2]} 4. defmacro my_macro(input_ast), где my_macro это фукнция, которая принимает AST (input_ast) и возвращает AST, которое будет вставлено в код. Конец

Bogdan
спасибо, но блин к сожалению макросы для меня темн...

Когда-то давно, когда разбирался в макросах - пару статей с примерами наваял, пытался по-простому разложить, надеюсь поможет разобраться https://sofakingcode.medium.com/e1cb313979c8

Bogdan- Автор вопроса
Dmitry Shpagin
Когда-то давно, когда разбирался в макросах - пару...

Хорошая статья Только вот в следующей статье плохой пример с use для роутеров. Роутер это плаг, поэтому можно просто в одном роуетере передавать запрос в другой роутер

Bogdan
спасибо, но блин к сожалению макросы для меня темн...

макросы - это код, "пишушие" другой код. допустим ты хочешь наплодить функций вида def greet_vasya, do: "Hello, vasya!" def greet_lena, do: "Hello, lena!" ... Ты пишешь функцию def generate_greet(name) do "def greet_#{name}, do: \"Hello, #{name}!\"" end и можешь использовать её в генерации кода File.write("greets.ex", "defmodule Greets do") File.write("greets.ex", generate_greet("vasya"), :append) File.write("greets.ex", generate_greet("lena"), :append) File.write("greets.ex", "end", :append) Обрати внимание, что в "def greet_#{name}, do: \"Hello, #{name}!\"" есть цитируемые и подставляемые части. цитируемые - это def greet_, , do:\"Hello, , !\" подставляемые - это два раза #{name} Макрос делает по сути то же самое, только а) сразу в AST, б) цитируемые части вместо кавычек обрамляются quote do ... end, а подставляемые - unquote(...) defmacro generate_greet(name) do fun_name = "greet_#{name}" greet_string = "Hello, #{name}!" quote do def unquote(fun_name), do: unquote(greet_string) end end

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта