8
Elixirにはなぜ2種類の関数があるのですか?
私はElixirを学んでいて、なぜ2種類の関数定義があるのか不思議に思います。 defを使用して呼び出されたモジュールで定義された関数myfunction(param1, param2) fnを使用して呼び出され、で定義された無名関数myfn.(param1, param2) 2番目の種類の関数だけがファーストクラスのオブジェクトのようであり、パラメーターとして他の関数に渡すことができます。モジュールで定義された関数は、でラップする必要がありますfn。otherfunction(myfunction(&1, &2))それを簡単にするために似ている構文糖がありますが、そもそもなぜそれが必要なのですか?なぜ私たちはできないのotherfunction(myfunction))ですか?Rubyのようにモジュール関数を括弧なしで呼び出すことだけを許可するのですか?モジュールの機能とファンも持つErlangからこの特性を継承しているようですが、実際にはErlang VMが内部でどのように機能するかに由来していますか? 2つのタイプの関数を持ち、それらを他の関数に渡すためにあるタイプから別のタイプに変換する利点はありますか?関数を呼び出すための2つの異なる表記法がある利点はありますか?