2017-06-08 8 views
0

私はエリクサーには新しく、リストの理解を使って構造体の新しいリストを生成しようとしています。新しいリストの構造を作成するためのエリクシールリストの理解

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は、構造体のリストを返す別の関数を取ります。実際の実装はデータベースに呼び出します。このコードは、StUbbedデータを返そうとしているExUnitテスト用です。

私はここで何か明らかに間違っているようです。ここで私が実行したときに私が取得エラーです:mix test

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

は、だから私は、モジュールのインポートをしないのですか、どのように他の私は、リストの内包表記を使用して構造体のリストを生成していますか?

+3

実際のコードを掲載することはできますか? '&1'は完全なコードであれば有効な構文ではありません。 – Dogbert

+0

@Dogbertは要望どおりに詳細を述べました。ありがとうございました。 –

+1

投稿したコードに問題が見つかりません。私は問題があなたが楽しい結果をどのように処理しているのかと考えています。あなたは 'ServiceX.update_holdings'実装を投稿するべきです。 –

答えて

0

不正なコード:

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

問題は、余分なネストされた列挙holding <- holdingsです。これは、私がエルキシールでどのように動作するか誤解したため、素人間違いです。 上記を次のように変更して問題を解決しました。

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

@StevePallenあなたは完全に正しいです。私は、update_holdingsメソッドでnoobの間違いをしました。正しい方向に私を指してくれてありがとう。 –

関連する問題