2012-02-27 4 views
1

私は次のメソッドを持っているに可能投げかけます。私は間違っていますか?のAreは、Scalaの

@Transactional 
    def registerChildminderAccount(childminderAccount: ChildminderAccount): Boolean = { 
    childminderAccountDAO.save((ChildminderAccount) generateTokenForAccount(childminderAccount))//problem here!! 
    if (mailerService.requestChildminderConfirmation(childminderAccount)) { 
     return true 
    } else { 
     return false 
    } 
    } 

は、私は次のエラーを取得する:私はChildminderAccountクラスにgenerateTokenForAccountを呼び出したvalue generateTokenForAccount is not a member of object com.bignibou.domain.ChildminderAccountかのように。

誰でもお手伝いできますか? (returnのように)

答えて

10

あなたここでキャストを使用することができます扱うよりよいエラーのために「一致」を使用したいかもしれませんが、ScalaのasInstanceOfで一般的にコードのにおいがあります。代わりに、次の試してみてください。

def generateTokenForAccount[A <: Account](account: A): A = { 
    account.setAccountToken(UUID.randomUUID.toString) 
    account 
} 

今、あなたはChildminderAccountに入れる場合は、ChildminderAccountを取得します。

4
generateTokenForAccount(childminderAccount).asInstanceOf[ChildminderAccount] 
+0

ありがとうTomasz! – balteo

4

generateTokenForAccount(childminderAccount) match { 
    case acc: ChildminderAccount => childminderAccountDAO.save(acc) 
    case _ => // ERROR 
} 
0

なぜgenerateTokenForAccountその入力を返すのですか?これは誤解を招きます。なぜなら、実際にはそうではないにしても、新しい修正オブジェクトを構築すると信じるからです。その代わりに、渡されたオブジェクトを変異させることがこれを示すためにUnitを返す必要があります:。

def generateTokenForAccount(account: Account) { 
    account.setAccountToken(UUID.randomUUID().toString()) 
} 

今のタイプは、あなたが単に順序で効果を使用できることを確認するためにあなたをガイド:また

def registerChildminderAccount(childminderAccount: ChildminderAccount): Boolean = { 
    generateTokenForAccount(childminderAccount) 
    childminderAccountDAO.save(childminderAccount) 
    mailerService.requestChildminderConfirmation(childminderAccount) 
    } 

を、いつでもif foo { return true } else { return false }があります。これはreturn fooに相当します。 Scalaでは、ブロック内の最後の式が自動的に返されるため、returnキーワードを削除することもできます。