Ich möchte eine Anwendung testen und habe beschlossen, Konfigurationsparameter mit Umgebungsvariablen an meine erlang-Anwendung zu übergeben. Derzeit lese ich sie als ein Makro mit -define(PARAMETER1, os:getenv("PARAMETER1")).
Erlang: Umgebungsvariablen lesen und einer Konstante zuweisen
Allerdings wird bei dieser Implementierung die Variable bei jedem Anruf gelesen (Und ich bin mir nicht sicher über die Leistung dieses Aufrufs).
Gibt es eine Möglichkeit, Umgebungsvariablen beim Starten der Anwendung nur einmal zu lesen?
Dies ist für einmal zu lesen und es an den Arbeiter zu übergeben. Aber wie kann ich auf diese Informationen zugreifen? Wie man sie speichert, um einfachen Zugang zu haben, ohne sie von Funktion zu Funktion zu übergeben. Ich schreibe eine Anwendung, in der ich einen rohen Socket höre und wann immer ein Paket ankommt, brauche ich die Informationen, die in meinem os vars konfiguriert sind. – muehsi
Sie könnten den gelesenen Wert in der ETS speichern, auf die von jedem Prozess aus zugegriffen werden kann. Oder Sie können es in einem separaten "gen_server" speichern und fragen Sie den "gen_server" für den Wert jedes Mal, wenn Sie es brauchen. Es geht nicht anders. Erlang wurde entwickelt, um eine funktionale Sprache zu sein, die keinen einfachen Zugang zum Shared State bietet. Eine Funktion kann nur Daten verwenden, die explizit an sie übergeben wurden oder die sie mit anderen Funktionen abfragen können (in diesem Fall "os: getenv", "ets", dedicated "gen_server" oder ähnliches). Dies gilt natürlich für dynamische Daten, die während des Programmlaufs gelesen werden, nicht für statische Daten, die dem Compiler bekannt sind. – Amiramix