2017-07-02 3 views
0

私はオブジェクトのリストを縮小しようとしていますが、Scalaと私の脳はちょうど収束しません(または私は完全に間違った方法で考えています、笑)。私の質問は非常にシンプルですが、とにかく解決策を見つけることができません。Scalaのオブジェクトのリストを減らしてください

エラーが怒鳴るようになります。

type mismatch; 
found : Double 
required: models.Transaction 


def accountBalance(account: String): Double = { 
    val accountTransactionList = Transaction.accountBalance(account) 
    accountTransactionList.reduce { 
     (transactionA, transactionB) => transactionA.amount + transactionB.amount 
    } 
    0.0 
} 

はTransaction.accountBalance(アカウント)と私のオブジェクトトランザクション:

object Transaction { 
    var accountTransactions = Map[String, List[Transaction]]() 

    def accountBalance(account: String): List[Transaction] = accountTransactions.getOrElse(account, List[Transaction]()) 
} 

私は、コードのコンパイルだけして0.0を返すのですが、なぜScalaは期待しています私のクラスモデル。取引?

ありがとうございました!

+0

reduceには、アキュムレータと現在の値の入力があります。私は '(transactionA、transactionB)=> transactionA.amount + transactionB.amount'を '(acc、transactionA)=> acc + transactionA.amount'に変更したいと思います。より多くのコードなしで言うのは難しい。 – erip

+0

@eripこれは動作しません、このエラーを示しています:オーバーロードされたメソッド値[+]を適用することはできません(models.Transaction) –

答えて

1

reduce()の定義を考えてください。

def reduce[A1 >: A](op: (A1, A1) ⇒ A1): A1 

すべての型が一致している必要があります。コレクションにはタイプがA1であり、最終結果はタイプA1です。 accountTransactionListがこの要件を満たしているかのようには見えません。

reduceLeft()およびreduceRight()は、この点でもう少し柔軟性がありますが、AおよびBのタイプはまだ関連している必要があります。

def reduceLeft[B >: A](op: (B, A) ⇒ B): B 
+0

ああ、私は非常に愚かです、あなたはあなたが望むものにリストを減らすことができると思ったちょうどjavascriptのように。私は考えを持っていると思う!ありがとうございました –

関連する問題