у меня есть этот модуль в эликсира с атрибутом:модуль доступа атрибуты вне модуля
defmodule MyAwesomeModule do
@awesome_number 7
# other stuff...
end
Я не могу получить доступ к @awesome_number
вне модуля. Я попытался с помощью метода Module.get_attribute/2
, но он выдает эту ошибку:
iex(79)> Module.get_attribute(MyAwesomeModule, :awesome_number)
** (ArgumentError) could not call get_attribute on module MyAwesomeModule because it was already compiled
(elixir) lib/module.ex:1101: Module.assert_not_compiled!/2
(elixir) lib/module.ex:1016: Module.get_attribute/3
Так прямо сейчас, я оберточной атрибут модуля в способе доступа к нему, но это не реально сделать смысл для меня. Я мог бы просто использовать метод и прекратить использование атрибута все вместе:
defmodule MyAwesomeModule do
@awesome_number 7
def awesome_number, do: @awesome_number
# other stuff...
end
Так что мой вопрос, есть лучший/правильный способ сделать это?
Хм. ИМО, которая кажется очень слабой причиной. Я не вижу никакого использования другого использования атрибутов модуля (кроме документов, тегов и т. Д.). – Sheharyar
. Библиотека Elixir Plug Plug - хороший пример использования атрибутов модуля с 'accumulate: true'. Вот ссылка, если вы хотите больше копать в источнике https://github.com/elixir-lang/plug/blob/19f53a67e672152a7393611681431c1e0ec1be04/lib/plug/builder.ex#L121 – ventsislaf