Dlaczego w Elixirze są dwa rodzaje funkcji?

Uczę się Elixira i zastanawiam się, dlaczego ma dwa rodzaje definicji funkcji:

  • funkcje zdefiniowane w module za pomocą def, wywołane za pomocą myfunction(param1, param2)
  • funkcje anonimowe zdefiniowane za pomocą fn, wywołane za pomocą myfn.(param1, param2)

Tylko drugi rodzaj funkcji wydaje się być obiektem pierwszej klasy i może być przekazany jako parametr do innych funkcji. Funkcja zdefiniowana w module musi być zawinięta w fn. Jest trochę cukru składniowego, który wygląda jak otherfunction(myfunction(&1, &2)) w kolejności aby to ułatwić, ale dlaczego jest to konieczne w pierwszej kolejności? Dlaczego nie możemy po prostu zrobić otherfunction(myfunction))? Czy tylko po to, aby umożliwić wywołanie funkcji modułu bez nawiasu, jak w Ruby? Wydaje się, że odziedziczył tę cechę po Erlangu, który ma również Funkcje modułów i zabawy, więc czy rzeczywiście pochodzi ona od tego, jak maszyna wirtualna Erlang działa wewnętrznie?

Czy istnieje jakaś korzyść z posiadania dwóch typów funkcji i konwersji z jednego typu do drugiego, aby przekazać je do innych funkcji? Czy istnieje korzyści posiadanie dwóch różnych notacji do wywoływania funkcji?

 230
Author: Zen, 0000-00-00

1 answers

 321
Author: ,
Warning: date() expects parameter 2 to be long, string given in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54