And*_*rie 60 elixir phoenix-framework
我正在阅读编程凤凰书,我想知道def和之间的区别是什么defp.
我的控制器中有几个功能 - 大多数都是这样的动作:
def new (conn, _params) do
...
end
Run Code Online (Sandbox Code Playgroud)
这本书让我在这个控制器中创建另一个函数,这不是典型的控制器动作,如下所示:
defp user_videos(user) do
...
end
Run Code Online (Sandbox Code Playgroud)
所以我的问题是如何在Phoenix Framework中的控制器内定义函数defp时知道何时使用以及何时使用def.
小智 5
所以我的问题是,我如何知道在Phoenix框架中的控制器中定义函数时何时使用defp和何时使用def。
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
Run Code Online (Sandbox Code Playgroud)
这是一个用于SEC归档的解析器的示例:SEC Company Filings Parser。main def方法包装了其他模块真正不需要知道的所有私有函数。