LL
before_compile
Если хочется переписывать старый, то нужно менять модуль в отдельном компиляторе или в after_compile
. Что очень плохая практикаSize: a a a
LL
before_compile
Если хочется переписывать старый, то нужно менять модуль в отдельном компиляторе или в after_compile
. Что очень плохая практикаAB
В
AD
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.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]
defmodule Foo do
Module.register_attribute(Foo, :some_bar, accumulate: true)
@some_bar 9
@some_bar 10
@some_bar 11
end
LL
defmodule Foo do
Module.register_attribute(Foo, :some_bar, accumulate: true)
@some_bar 9
@some_bar 10
@some_bar 11
end
AB
AD
LL
defmodule Foo do
Module.register_attribute(Foo, :some_bar, accumulate: true)
@some_bar 9
@some_bar 10
@some_bar 11
end
@some_bar
9
написать def f(), do: @some_bar
Эта функция всегда будет возвращать [9]
В
В
AD
@some_bar
9
написать def f(), do: @some_bar
Эта функция всегда будет возвращать [9]
B
LL
VK
AD
LL
AD
LL
AD