"メソッドコールチェーン"を作成することができますか?すべてのメソッドが同じ[エラー、結果]のいずれかを返すかどうかを知りたいのですが。メソッドをチェーンで呼び出す
私がしたいのは、すべてのメソッドを連続して呼び出し、メソッドがLeft(Error)を返したときにメソッド呼び出しを停止し、コールチェーン内の最初のLeftを返します。
私はfold、map、projectionsを使っていくつかのものを試しました...しかし、私はScalaを初めて使っていて、洗練された解決策を見いだせません。
私はそのような何かしようと試みてきました:
def createUserAndMandatoryCategories(user: User) : Either[Error,User] = {
User.create(user).right.map {
Logger.info("User created")
Category.create(Category.buildRootCategory(user)).right.map {
Logger.info("Root category created")
Category.create(Category.buildInboxCategory(user)).right.map {
Logger.info("Inbox category created")
Category.create(Category.buildPeopleCategory(user)).right.map {
Logger.info("People category created")
Category.create(Category.buildTrashCategory(user)).right.map {
Logger.info("Trash category created")
Logger.info("All categories successfully created created")
Right(user)
}
}
}
}
}
}
をしかし、それは動作しません。 とにかく私は本当にそれがかかるインデントを好きではありません。
val result : Either[String,CallResult] = call1.something("error 1 description")
.call2.something("error 2 description")
.call3.something("error 3 description")
.call4.something("error 4 description")
はそれが可能です:私は(?私は使用倍必要がありますね)
私はそのように書かれて何かを探している問題を記述した新しい文字列にエラーを変換したいのですがほかに Scalaでこのようなことをするのですか?おそらくEitherとOptionの両方を使用していますか?
1つの制約は、最初の呼び出しが失敗した場合は、他の呼び出しが行われないようにすることです。私はすべてを呼び出し、どちらかに参加するソリューションは欲しくない。
ありがとうございます!
こんにちは、形質検証することは、これはどちらかのモナドの説明である – fp4me
探しているものです。 –