0
私が使用している例では、クレジットカード番号の文字列を検証しています。検証は、1)発行者はクレジットカード番号のために存在するべきであり、2)発行者は商人によって受け入れられるべきである。中間結果を別の読み取り方法で使用する方法
これまでの仕事はこれです。理想的には、中間結果Issuer
を最初の読み込みから次の読み込みで使用したいと考えています。より良い方法がありますか?
私が使用している例では、クレジットカード番号の文字列を検証しています。検証は、1)発行者はクレジットカード番号のために存在するべきであり、2)発行者は商人によって受け入れられるべきである。中間結果を別の読み取り方法で使用する方法
これまでの仕事はこれです。理想的には、中間結果Issuer
を最初の読み込みから次の読み込みで使用したいと考えています。より良い方法がありますか?
それが直接の答えではないのですが、あなたは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
を使用して開始するゲートウェイケースです。
ありがとうございました。私はReads.applyも動作し、JsErrorとValidationResultの間の接続を作っていないと思います。 Ex。 {jsValue => jsValue.validate [文字列]マッチ{ 場合JsSuccess(cardNumberプロパティ、_)=> ヴァルoptIssuer = inferIssuer(cardNumberプロパティ) optIssuerマッチ{ ケース一部(発行者)=> は//発行者かどうかを確認読み出し商人によって受け入れられる ??? ケースなし=> JsError( "無効な発行者") } 場合ERR:JsError => ERR } } – ferk86
ferk86 'issuer'は、別の関数のスコープ下にあり、第二の機能でアクセスすることはできません、あなたので、@いくつかのスパゲッティソリューションが必要です - 誰かがここにそれを提供してくれることを願っています。 – ipoteka