2015-06-10 17 views
15

//, Die meisten Sprachen erlauben Blockkommentare und mehrzeilige Befehle.Mehrzeiliger Kommentar in Elixir

Zum Beispiel kann ein mehrzeiliger Kommentar in HTML sieht wie folgt aus:

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

In Elixir, das nächste, was ich gefunden habe, ist wie folgt:

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

EEx Smartengine <% #comments %> scheinen aus der Quelle entfernt werden, auch wenn sie mehrzeilig sind. Dies ist jedoch nur ein Workaround.

Hat Elixir eine mehrzeilige Kommentarfunktion oder eine Möglichkeit, den Compiler anzuweisen, Text aus der kompilierten .beam-Datei zu verwerfen?

+1

Gibt es einige Problem mit der Verwendung der # in mehreren Zeilen? Viele Editoren unterstützen das automatische Einfügen von Kommentarzeichen am Anfang einer Reihe von markierten Zeilen. –

+1

Wenn Sie Code festschreiben, möchten Sie möglicherweise die Festschreibungshistorie bestimmter Zeilen nicht ändern. zumindest für meinen Anwendungsfall. – owyongsk

Antwort

13

Elixir hat keine mehrzeiligen Kommentare. Ein häufiger Anwendungsfall für mehrzeilige Kommentare ist die Dokumentation von Modulen und Funktionen, für die Sie die module attributes @doc and @moduledoc zusammen mit heredocs verwenden können.

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

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

// Eigentlich wollte ich das nicht in die Frage stellen, da mir b angeklagt wird Ich bin schon sehr lange dabei, aber ich versuche, meine Projekte in die Literate-Programmierung umzuwandeln. Mir wurde gesagt, dass ich eine ziemlich merkwürdige Art habe, über Dinge zu gehen, und ich werde nicht derjenige sein, der mein Projekt aufrechterhält. Eine Art Zwischenschritt in dieser Umwandlung wird, glaube ich, massive Strings beinhalten, die ich lieber nicht in meinen '.beam's landen würde. Gehen die '@ moduledoc' und' @doc' im kompilierten Code auf? Gibt es literale Programmiertools, die Elixir-lang verwenden? –

+0

//, Vielleicht sollte ich diese als separate stackoverflow.com Fragen stellen. –

+0

Ja, die Modulattribute landen in der Strahldatei, so dass wir zum Beispiel die Dokumentation für ein Modul in iex nachschlagen können. Ich kenne literarische Programmierwerkzeuge für Elixier nicht, aber das bedeutet nicht, dass sie nicht existieren. Sind Sie sicher, dass die Kommentare in der BEAM-Datei landen? Ich denke, sie sollten verworfen werden. –

6

Makros zu einem gewissen Grad helfen, hier könnte:

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

//, Das scheint keine "richtige" Antwort zu sein, wie die Verwendung von '@ moduledoc' und' @ doc', aber es beantwortet die spezifische Frage direkter. –

+0

//, Würde dieser Text in der BEAM-Datei vorhanden sein? –

+2

@NathanBasanese: Der Text wird vom Makro verworfen, so dass er nach der Makroverarbeitung nicht im AST erscheint. Also nein, es wird nicht in die BEAM-Datei gelangen. – dimagog

3

Sie einfach Modul-Attribute für mehrzeilige Kommentare können, kein Makro erforderlich. Ich verwenden in der Regel die folgenden für die Dokumentation/Kommentierung privaten Funktionen:

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

Dies muss der einfachste und sauberste Weg sein, mehrzeilige Kommentare zu machen! –

+1

'Warnung: Modulattribut @docp wurde gesetzt aber nie benutzt' – squixy

+0

Ja, Sie haben Recht. Ich denke, das hat in Elixir 1.4.x begonnen, deshalb benutze ich diese Strategie nicht mehr aus dem gleichen Grund. Ich bin zurück, um hauptsächlich Kommentare zu verwenden. Obwohl ich in einigen Fällen tatsächlich ein Makro namens 'doc' erstellt habe, das zu nichts kompiliert. – Kip

1

Ich versuche nur „““verwenden, um schnell Code a la Python zu kommentieren, ohne es in eine Dokumentation zu drehen

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

//, Ah, aber endet es in der '.beam' Datei? –

+0

Ich werde jetzt auf ein BEAM Kaninchenloch gehen, melde mich wieder. – owyongsk

+1

Dies gibt eine Warnung 'Warnung: Codeblock enthält nicht verwendetes Literal" DIESE SIND KOMMENTARE \ n "(entfernen Sie das Literal oder weisen Sie es _ zu, um Warnungen zu vermeiden)' – mraaroncruz