LL
Ну у меня есть автотабуляция в редакторе, но я её прямо в редакторе вызываю
Size: a a a
LL
В
__before_compile__
. Можно даже сказать что он подставляется сразу во время его появления в AST
(только если кусок кода не в quote
)__before_compile__
, а их используют для аггрегации каких-то значений во время компиляции модуля, для локального стейта компилятора, чтобы не спавнить какие-то агенты и всё такоеAB
defmodule Foo do
@before_compile Baz.FooManager
@some_bar [10, 11]
def call_some_bar, do: @some_bar
end
defmodule Baz.Foomanager do
defmacro __before_compile___(env) do
value = Module.get_attribute(env.module, :some_bar)
Module.delete_attribute(env.module, :some_bar)
Module.register_attribute(env.module, :some_bar, accumulate: true)
Module.put_attribute(env.module, :some_bar, [9 | value])
end
end
iex> Foo.call_some_bar
#=> [10, 11]
SM
В
В
МБ
B
for x <- 0..10, y <- 5..20, x > 2 and y < 15,
do: {x, y + x}, into: %{}
LL
MVC
или когда эти константы зависят от самого модуля (например @enforce_keys
) или ещё какой-нибудь список полей/определённых значенийApplication Env
или persistent_term
или FastGlobal
или ещё что...В
defmodule Foo do
@before_compile Baz.FooManager
@some_bar [10, 11]
def call_some_bar, do: f_some_bar()
end
defmodule Baz.Foomanager do
defmacro __before_compile___(env) do
value = Module.get_attribute(env.module, :some_bar)
quote do
def f_some_bar, do: [9 | value]
end
end
end
iex> Foo.call_some_bar
#=> [9, 10, 11]
LL
VK
for x <- 0..10, y <- 5..20, x > 2 and y < 15,
do: {x, y + x}, into: %{}
LL
defmodule Foo do
@before_compile Baz.FooManager
@some_bar [10, 11]
def call_some_bar, do: f_some_bar()
end
defmodule Baz.Foomanager do
defmacro __before_compile___(env) do
value = Module.get_attribute(env.module, :some_bar)
quote do
def f_some_bar, do: [9 | value]
end
end
end
iex> Foo.call_some_bar
#=> [9, 10, 11]
monkey patching
вообще нужен? Какая изначальная проблема?AB
LL
__using__
с defoverridable
LL
В
MVC
или когда эти константы зависят от самого модуля (например @enforce_keys
) или ещё какой-нибудь список полей/определённых значенийApplication Env
или persistent_term
или FastGlobal
или ещё что...В
AB
LL