2016-07-15 14 views
0

私が使用している例では、クレジットカード番号の文字列を検証しています。検証は、1)発行者はクレジットカード番号のために存在するべきであり、2)発行者は商人によって受け入れられるべきである。中間結果を別の読み取り方法で使用する方法

これまでの仕事はこれです。理想的には、中間結果Issuerを最初の読み込みから次の読み込みで使用したいと考えています。より良い方法がありますか?

答えて

1

それが直接の答えではないのですが、あなたはfor/yield式として、このロジックを記述するために検討するかもしれない:

val result: Either[String, Issuer] = for { 
    card <- json.validate[Card].asEither.leftMap(_ => "Reading error") 
    issuer <- findIssuer(card.number) //returns Either[String, _] 
    _ <- isAccepted(issuer) // returns Either[String,_] 
} yield issuer 

P.S.これは、scalaz Validationを使用して開始するゲートウェイケースです。

+0

ありがとうございました。私はReads.applyも動作し、JsErrorとValidationResultの間の接続を作っていないと思います。 Ex。 {jsValue => jsValue.validate [文字列]マッチ{ 場合JsSuccess(cardNumberプロパティ、_)=> ヴァルoptIssuer = inferIssuer(cardNumberプロパティ) optIssuerマッチ{ ケース一部(発行者)=> は//発行者かどうかを確認読み出し商人によって受け入れられる ??? ケースなし=> JsError( "無効な発行者") } 場合ERR:JsError => ERR } } – ferk86

+0

ferk86 'issuer'は、別の関数のスコープ下にあり、第二の機能でアクセスすることはできません、あなたので、@いくつかのスパゲッティソリューションが必要です - 誰かがここにそれを提供してくれることを願っています。 – ipoteka

関連する問題