2017-09-26 2 views
2

Ich bin auf ein Stück Code gestoßen, das ich nicht ganz verstehen kann. Es sieht so aus:Erlang - Hilfe beim Verständnis des grundlegenden Erlang-Codes

% spawn process which waits for a message and prints it 
Pid = spawn(fun() -> 
    receive 
    X -> io:fwrite("I received: ~p~n", [X]) 
    end 
end), 
% send a message to the new process 
Pid ! {message, "Hello"}. 

In der letzten Zeile, ist "Nachricht" ein Atom, das im Modul definiert ist? Ich kann diesen Teil nicht wirklich verstehen.

Mein Versuch, es zu verstehen, wäre das: Wir speichern Dinge in Tupeln, in denen das erste Element beschreibend für den Inhalt ist. Zum Beispiel: {celsius, 55}. Was weniger klar ist, ist, dass die Atommeldung nicht im Modul definiert ist. Müssen Sie es definieren? Keine Deklaration ist notwendig, also denke ich, dass Sie das Atom nicht definieren müssen, bevor Sie es verwenden. Hab ich recht?

Danke für die Hilfe!

Der Code ist von here.

+1

Ja. Atome sind im Allgemeinen Literale. Sie werden zur Atomtabelle hinzugefügt, wenn sie gefunden werden. Verwenden Sie sie wie ein Zeichenfolgenliteral in einer anderen GC-aktivierten Sprache. Führen Sie den Code in erl aus und sehen Sie! Es macht viel mehr Spaß als hier zu posten. – zxq9

Antwort

3

Richtig - Sie verwenden nur Atome nach Belieben. Sie sind nirgendwo "definiert".

+0

Mit ihnen wie das ist in Ordnung, aber denken Sie daran: https://stackoverflow.com/a/20518160/4366224 –

+0

Vielen Dank! Danke auch für den Link zum Atomspeicherleck. Sehr informativ! – Arian

0

Atome können beliebig verwendet werden. Jedes einzelne Atom wird in eine Atomtabelle eingegeben. Die Atomtabelle wird niemals Müll gesammelt. Die standardmäßige maximale Anzahl an Atomen für eine ERTS-Instanz ist 1048576. Diese Grenze kann erhöht werden, indem beim Start die Option + t verwendet wird. more information regarding limits. Zu Diagnosezwecken können Sie erlang: memory (atom) - elrang: memory (atom_used) Aufrufe verwenden, um sicherzustellen, dass Sie die verfügbaren Atome nicht ausgeschöpft haben. Sind die Atome erschöpft, führt dies ohne Vorwarnung zum sofortigen Abbruch des ERTS.

0

Grundlegend, Sie verstanden richtig. Sie können alles Atom verwenden, das Sie wollen, sie sind nirgends definiert. Außer etwas "spezielles Wort" Erlang:

receive, case, if, throw, catch, else... 
Verwandte Themen