2016-01-10 15 views
6

Mi chiedevo perché Elixir non ha un modulo Math.Perché Elixir non ha un modulo Math?

Capisco che possiamo scrivere questo utilizzando Erlang math: modulo:

alias :math, as: Math 

Ma, è buona norma mettere quella linea nel nostro codice Elixir?

In iex sembra funzionare:

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

Ahimè, è chiaro che non possiamo ottenere l'accesso alla documentazione in modo Elixir:

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

Perché dovremmo duplicare la funzionalità esistente di Erlang che è stata testata e provata? Dov'è un vantaggio convincente nel farlo? –

+0

Una volta letto @josevalim rispondo che il modulo di duplicazione non ha senso. L'elisir in termini di Erlang, può usare tutto da Erlang, quindi se non cambi nulla non ha senso clonare questi moduli proprio così. – PatNowak

risposta

6

In realtà loro sono un sacco di moduli attualmente in Erlang che non sono presenti in elisir. L'importazione di tutti loro non avrebbe molto senso, poiché i corrispondenti moduli di erlang sono disponibili ed è abbastanza facile usarli anche in elisir.

Anche dal docs

Elixir corre nella stessa macchina virtuale ed è compatibile con OTP. Non solo, tutti gli strumenti e le librerie disponibili nell'ecosistema Erlang sono disponibili anche in Elixir, semplicemente perché non ci sono costi di conversione dal chiamare Erlang da Elixir e viceversa.

Per quanto riguarda la documentazione Elixir è ancora relativamente nuovo, le persone sono working on it. Dovresti avere presto i documenti di erlang in iex. https://github.com/elixir-lang/elixir/issues/3589

6

ma, è una buona pratica di mettere quella linea nel nostro codice Elixir?

Sì. Alla fine, tutto è tradotto in Erlang AST, quindi compilato in bytecode BEAM. Non possiamo né negare né dimenticare l'eredità di Erlang in Elisir.

+1

Direi "no" dato che è perfettamente corretto chiamare il modulo di erlang direttamente e. Inoltre, non mettendo la linea, non offuschi che stai usando un modulo di erlang, dal momento che probabilmente non vuoi comunque quell'astrazione. –

Problemi correlati