2016-03-01 15 views
28

私はプログラミングフェニックスブックを通じてつもりだと私はdefdefpの違いは何であるか疑問に思って。フェニックスFrameworkのdef`と `` defp`の違いは何ですか?

私のコントローラ内のいくつかの機能があります - それらのほとんどは、このようなアクションは、次のとおりです。

def new (conn, _params) do 
... 
end 

ブック私は、このような典型的なコントローラのアクションではありません、このコントローラで別の関数を作成しました:

defp user_videos(user) do 
... 
end 

したがって、defpを使用する時期と、defを使用する時期については、Phoenix Frameworkのコントローラ内で機能を定義する際にどのように知っていますか。 Elixir’s documentation on functions within modulesから

+4

これはエリクサーのすべての真実である - だけでなく、フェニックスのフレームワーク。これはElixirの特質であり、フレームワークのものではありません。 –

+1

おねえています - ありがとう。私はErlang/Elixir/Phoenixには比較的新しいです。 –

答えて

49

モジュール内部では、我々はdefp/2def/2やプライベートの機能を持つ関数を定義することができます。プライベート関数は、ローカルでのみ呼び出すことができながらdef/2で定義された関数は、他のモジュールから呼び出すことができます。

あなたがより多くの質問がある場合は、そのドキュメントを読むこと自由に感じ。

4

私の質問は、defpを使用するタイミングと、フェニックスフレームワークのコントローラ内で関数を定義するときにdefを使用するタイミングを知る方法です。 defp機能はプライベート、または他のモジュールから呼び出し可能ではないのに対し、モジュールの

def機能は、他のモジュールから呼び出すことができます。 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ファイリングのためのパーサでこの例を示します。:SEC Company Filings Parserモジュールはそのdefp機能のすべての行動をラップ親def機能を提供するための共通のデザインパターンがあります。メインdefメソッドは、他のモジュールが実際に知る必要のないすべてのプライベート関数をラップします。

関連する問題