2016-01-10 10 views
6

Zastanawiam się, dlaczego Elixir nie ma modułu Math.Dlaczego Elixir nie ma modułu Math?

Rozumiem, że możemy napisać używając Erlang math: moduł:

alias :math, as: Math 

, ale jest to dobra praktyka, aby umieścić tę linię w naszym kodzie Elixir?

W iex wydaje się działać:

iex(1)> alias :math, as: Math 
nil 
iex(2)> Math.pi() 
3.141592653589793 
iex(3)> Math.pow(3, 2) 
9.0 

Niestety, jest oczywiste, że nie można uzyskać dostęp do dokumentacji w sposób Elixir:

iex(4)> h(Math) 
:math is an Erlang module and, as such, it does not have Elixir-style docs 
+1

Dlaczego powinniśmy powielić istniejącą funkcjonalność Erlanga, która została przetestowana i sprawdzona? Gdzie jest to ważna zaleta? –

+0

Gdy przeczytam odpowiedź @josevalim, duplikowanie modułu nie ma sensu. Eliksir pod względem Erlanga, może wykorzystać wszystko z Erlangu, więc jeśli niczego nie zmienisz, nie ma sensu klonować tych modułów właśnie tak. – PatNowak

Odpowiedz

6

Właściwie ich wiele modułów obecnie w erlangu, które nie są obecne w eliksiru. Importowanie ich wszystkich nie miałoby większego sensu, ponieważ odpowiednie moduły erlang są dostępne i całkiem łatwe w użyciu w eliksirach.

Również z docs

Elixir działa w tej samej maszynie wirtualnej i jest kompatybilny z OTP. Co więcej, wszystkie narzędzia i biblioteki dostępne w ekosystemie Erlang są również dostępne w Elixir, po prostu dlatego, że nie ma kosztów konwersji związanych z wywołaniem Erlang z Elixir i odwrotnie.

Jeśli chodzi o dokumentację Eliksir wciąż jest stosunkowo nowy, ludzie są working on it. Powinieneś wkrótce mieć dokumenty erlang w iex. https://github.com/elixir-lang/elixir/issues/3589

6

, ale czy dobrą praktyką jest umieszczenie tej linii w naszym kodzie Eliksiru?

Tak. W końcu wszystko zostało przetłumaczone na Erlanga AST, a następnie skompilowane do kodu bajtowego BEAM. Nie możemy ani zaprzeczyć, ani zapomnieć o dziedzictwie Erlanga w eliksiru.

+1

Powiedziałbym "nie", ponieważ jest całkiem dobrze wywołać moduł erlang bezpośrednio i. Plus nie umieszczając linii, nie zaciemniasz, że używasz modułu erlang, ponieważ prawdopodobnie i tak nie chcesz tej abstrakcji. –