2016-08-21 3 views
2

ich zur Zeit durch learn you some Erlang gerade lese, und ich habe das folgende Beispiel implementiert:Variablen deklarieren außerhalb von Erlang Funktionen

get_weather(City) -> 
    Weather = [{toronto, rain}, 
       {montreal, storms}, 
       {london, fog}, 
       {paris, sun}, 
       {boston, fog}, 
       {vancouver, snow}], 
    [LocationWeather || {Location, LocationWeather} <- Weather, Location =:= City]. 

Dieses Beispiel funktioniert gut, aber wenn ich will die Variable Weather außerhalb der Funktion erklären , Bekomme ich den Fehler:

Gibt es eine Möglichkeit, Variablen außerhalb der Funktionsbereiche zu deklarieren? Kann ich das über Header-Dateien machen?

Antwort

5

Kurze Antwort: Nein. Variablen können nur innerhalb von Funktionen definiert werden.

Eine weitere Möglichkeit, Ihre Funktion zu implementieren ist Musterabgleich in Funktion Köpfe zu verwenden:

get_weather(toronto) -> rain; 
get_weather(montreal) -> storms; 
get_weather(london) -> fog; 
get_weather(paris) -> sun; 
get_weather(boston) -> fog; 
get_weather(vancouver) -> snow. 

Mit diesem Ansatz Sie keine Variablen brauchen überhaupt. Sie erhalten das Ergebnis auch als einzelnes Atom, was meiner Meinung nach ein besseres Design ist als das Zurückgeben eines einzelnen Atoms in einer Liste.

+0

Wie wäre es in Header-Dateien, können wir 'Records' erklären und exportieren, aber nicht andere Arten wie' lists'? – Suddi

+2

@Suddi: Datensätze sind keine Werte oder Typen. Sie sind syntaktischer Zucker um Tupel. Es ist mehr wie "-definieren" als alles andere. –

2

Eine Alternative ist es, eine Funktion zu definieren, die die Datenliste zurückgibt:

weather_data() -> [{toronto, rain}, 
        {montreal, storms}, 
        {london, fog}, 
        {paris, sun}, 
        {boston, fog}, 
        {vancouver, snow}]. 
get_weather() -> 
    [LocationWeather || {Location, LocationWeather} <- weather_data(), Location =:= City]. 
Verwandte Themen