В чем разница между " def " и "defp" в рамках Phoenix?
Я просматриваю книгу программирования Phoenix, и мне интересно, в чем разница между def
и defp
- это.
в моем контроллере есть несколько функций - большинство из них такие действия:
def new (conn, _params) do
...
end
книга заставила меня создать еще одну функцию в этом контроллере, которая не является типичным действием контроллера, как это:
defp user_videos(user) do
...
end
поэтому мой вопрос в том, как я знаю, когда использовать defp
и когда использовать def
при определении функции внутри контроллера в рамках Phoenix.
2 ответов
С документация Elixir по функциям в модулях:
внутри модуля, мы можем определить функции
def/2
и частные функции сdefp/2
. Функция, определенная с помощьюdef/2
может вызываться из других модулей, в то время как частная функция может вызываться только локально.
Если у вас есть больше вопросов, не стесняйтесь читать эту документацию.
поэтому мой вопрос в том, как я знаю, когда использовать defp и когда использовать def при определении функции внутри контроллера в Phoenix Framework.
def
функции модуля могут вызываться из других модулей, тогда как defp
функции являются частными или не вызываются из других модулей. Как вы знаете, когда использовать def
и когда использовать defp
? Это зависит от того, о чем другие модули могут или не должны знать. Общий шаблон проектирования для модуль для предоставления родительского def
функция, которая обертывает все поведение его defp
функции:
defmodule MyModule do
def function do
# call all the defp functions below to do something
end
defp function2 do
# do something that no other module cares about or needs to know about
end
defp function3 do
# do something that no other module cares about or needs to know about
end
defp function4 do
# do something that no other module cares about or needs to know about
end
end
вот пример этого с парсером для SEC filings:SEC Company Filings Parser. Главный def
метод обертывает все частные функции, о которых не должен знать ни один другой модуль.