2015-06-10 18 views
15

//, La maggior parte delle lingue consente commenti ai blocchi e comandi multilinea.Commento multilinea in elisir

Ad esempio, un commento su più righe in HTML si presenta come la seguente:

<!-- 
Warning, brave programmer: 
Here be dragons. 
--> 

In Elixir, la cosa più vicina che ho trovato è il seguente:

http://elixir-lang.org/docs/v1.0/eex/

EEx smartengine <% #comments %> sembrano essere scartati dalla fonte, anche se sono multilinea. Tuttavia, questa è solo una soluzione.

L'elisir ha una funzione di commento multilinea o un modo per indicare al compilatore di scartare il testo dal file .beam compilato?

+1

c'è qualche problema con l'uso del # su più righe? Molti editor hanno il supporto per l'inserimento automatico di caratteri di commento all'inizio di un insieme di linee segnate –

+1

A volte quando si esegue il commit del codice, è possibile che non si desideri modificare la cronologia di commit di linee specifiche, almeno per il mio caso d'uso – owyongsk

risposta

13

L'elisir non ha commenti multilinea.

Tuttavia, un caso di utilizzo molto comune per commenti multilinea è la documentazione di moduli e funzioni, per cui è possibile utilizzare module attributes @doc and @moduledoc insieme a heredocs.

defmodule MyModule do 
    @moduledoc """ 
    This module is great at X 
    """ 

    @doc """ 
    Frobnicates the given string. 
    """ 
    def frobnicate(s) do 
    end 
end 
+0

//, in realtà, non volevo mettere questo nella domanda da quando sono stato accusato di b Eing è molto prolisso, ma sto cercando di convertire i miei progetti nella tecnica di Literate Programming. Mi è stato detto che ho un modo piuttosto strano di fare le cose, e non sarò io a mantenere il mio progetto. Sospetto, una sorta di passaggio intermedio in questa conversione implicherà stringhe massive che preferirei non finire nel mio '.beam's. Il '@ moduledoc' e' @ doc' finiscono nel codice compilato? Esistono strumenti di programmazione letteraria che usano Elixir-lang? –

+0

//, Forse dovrei chiedere a questi come domande separate stackoverflow.com. –

+0

Sì, gli attributi del modulo finiscono nel file del raggio, quindi possiamo cercare la documentazione per un modulo in iex, ad esempio. Non sono a conoscenza degli strumenti di programmazione alfabetici per l'elisir, ma ciò non significa che non esistano. Sei sicuro che i commenti finiscano nel file BEAM? Penso che dovrebbero essere scartati. –

6

macro potrebbero aiutare qui in una certa misura: attributi

defmodule Comment do 
    defmacro comment(_text) do 
    end 
end 

defmodule TestComment do 
    import Comment 

    comment """ 
    Module 
    Comment 
    """ 

    def func do 
    comment """ 
    Function 
    Comment 
    """ 
    end 
end 
+0

//, Questa non sembra una risposta "corretta" come usando '@ moduledoc' e' @ doc', ma risponde alla domanda specifica più direttamente. –

+0

//, questo testo sarebbe presente nel file BEAM? –

+2

@NathanBasanese: il testo viene scartato dalla macro, quindi non sarà nemmeno nell'AST dopo l'elaborazione della macro. Quindi no, non lo farà nel file BEAM. – dimagog

3

Si può semplicemente utilizzare il modulo per commenti su più righe, senza macro richiesto. Io di solito utilizzare il seguente per la documentazione/commentando funzioni private:

@docp """ 
This is my 
multi line 
comment 
""" 
+0

Questo deve essere il modo assolutamente semplice e pulito di fare commenti multiline! –

+1

'warning: l'attributo module @docp è stato impostato ma non è mai stato utilizzato ' – squixy

+0

Sì, hai ragione. Penso che sia iniziato in Elixir 1.4.x, quindi non uso più questa strategia per lo stesso motivo. Sono tornato a usare principalmente commenti. Anche se in alcuni casi ho effettivamente creato una macro chiamata 'docp' che non compila niente. – Kip

1

cerco di utilizzare solo """ di commentare rapidamente il codice alla Python, senza trasformarla in una documentazione

""" 
def some_function() do 
    some_code  
end 
""" 
+1

//, Ah, ma finisce nel file' .beam'? –

+0

Ora andrò in una buca di coniglio di BEAM, riferirò. – owyongsk

+1

dà un avvertimento 'warning: il blocco di codice contiene letterali non utilizzati" QUESTI COMMENTI \ n "(rimuovi il letterale o assegna a _ per evitare avvisi)' – mraaroncruz