2017-06-08 3 views
0

Ich bin ziemlich neu zu Elixir, und versuchen, eine neue Liste von Strukturen mit List Verständnis zu geben, und für das Leben von mir kann ich nicht scheinen, das richtig zu machen:Elixir List Verständnis zum Erstellen einer neuen Liste von Structs

holdings = ServiceX.update_holdings(
     fn() -> for n <- 1..3, do: n end, 
     &(for n <- 1..100, do: %Holding { 
            client_id: &1, 
            company_id: n, 
            company: "---", 
            revenue: 0.0 } 
     )) 

update_holdings nimmt in einer anderen Funktion, die eine Liste von Strukturen zurückgibt. Die eigentliche Implementierung ruft die Datenbank auf. Dieser Code ist für einen ExUnit-Test, bei dem ich versuche, einige stubbed-Daten zurückzugeben.

Scheint, ich bekomme etwas offensichtlich hier falsch. Hier ist der Fehler, den ich bekomme, wenn ich laufen: mix test

** (Protocol.UndefinedError) protocol Enumerable not implemented for 
    %Holding{client_id: 1, company: "---", company_id: 1, revenue: 0.0} 

So bin ich ein Modul Import fehlt, oder wie sonst produziere ich eine Liste von Strukturen mit Liste Verständnis?

+3

Können Sie den tatsächlichen Code buchen? '& 1' ist keine gültige Syntax, wenn das der vollständige Code ist und Sie einen Fehler bekommen sollten. – Dogbert

+0

@Dogbert ausgearbeitet wie gewünscht. Vielen Dank. –

+1

Ich kann kein Problem mit dem Code sehen, den Sie gepostet haben. Ich vermute, dass die Probleme von der Verarbeitung der Ergebnisse des Spaßes herrühren. Sie sollten die 'ServiceX.update_holdings'-Implementierung bereitstellen. –

Antwort

0

Falscher Code:

def update_holdings(f1, f2) do 
    ids = f1.() 
    for id <- ids, 
     holdings <- f2.(id), 
     holding <- holdings, 
     do: holding 
end 

Das Problem ist die zusätzliche verschachtelte Aufzählung holding <- holdings. Dies ist ein Amateurfehler, weil ich missverstanden habe, wie es in Elixir funktioniert. Das Ändern der oben auf die folgenden das Problem behoben:

def update_holdings(f1, f2) do 
    ids = f1.() 
    for id <- ids, 
     holding <- f2.(id), 
     do: holding 
end 
+0

@StevePallen Sie hatten völlig Recht. Ich habe den noob-Fehler in der Methode update_holdings gemacht. Danke, dass Sie mich in die richtige Richtung weisen. –

Verwandte Themen