Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elixir 什么';在Phoenix框架中,“def”和“defp”的区别是什么?_Elixir_Phoenix Framework - Fatal编程技术网

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
方法封装了所有其他模块都不需要知道的私有函数

这适用于所有的长生不老药——不仅仅是凤凰框架。这是长生不老药的特性,而不是框架的特性。