Elixir 什么';在Phoenix框架中,“def”和“defp”的区别是什么?
我正在阅读凤凰城的编程书籍,我想知道Elixir 什么';在Phoenix框架中,“def”和“defp”的区别是什么?,elixir,phoenix-framework,Elixir,Phoenix Framework,我正在阅读凤凰城的编程书籍,我想知道def和defp之间的区别是什么 在我的控制器中有几个功能-其中大多数是这样的操作: def new (conn, _params) do ... end defp user_videos(user) do ... end 这本书让我在此控制器中创建了另一个函数,它不是一个典型的控制器操作,如下所示: def new (conn, _params) do ... end defp user_videos(user) do ... end 因此,我的问题
def
和defp
之间的区别是什么
在我的控制器中有几个功能-其中大多数是这样的操作:
def new (conn, _params) do
...
end
defp user_videos(user) do
...
end
这本书让我在此控制器中创建了另一个函数,它不是一个典型的控制器操作,如下所示:
def new (conn, _params) do
...
end
defp user_videos(user) do
...
end
因此,我的问题是,在Phoenix框架中定义控制器内的函数时,如何知道何时使用defp
,何时使用def
。来源:
在模块内部,我们可以使用def/2
定义函数,使用defp/2
定义私有函数。使用def/2
定义的函数可以从其他模块调用,而私有函数只能在本地调用
因此defp
定义了一个私有函数
所以我的问题是,在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
下面是一个示例,其中包含SEC文件的解析器:。main
def
方法封装了所有其他模块都不需要知道的私有函数 这适用于所有的长生不老药——不仅仅是凤凰框架。这是长生不老药的特性,而不是框架的特性。