0
這是我以前的question的後續處理。假設我有以下功能:使用Scala處理任何錯誤
type Result[A] = Either[String, A] // left is an error message
def f1(a: A): Result[B] = ...
def f2(b: B): Result[C] = ...
def f3(c: C): Result[D] = ...
def f(a: A): Result[D] = for {
b <- f1(a).right
c <- f2(b).right
d <- f3(c).right
} yield d;
假如我也想更多信息添加到錯誤消息。
def f(a: A): Result[D] = for {
b <- { val r = f1(a); r.left.map(_ + s"failed with $a"); r.right }
c <- { val r = f2(b); r.left.map(_ + s"failed with $a and $b"); r.right }
d <- { val r = f3(c); r.left.map(_ + s"failed with $a, $b, and $c"); r.right }
} yield d;
該代碼看起來很醜。你會如何改進代碼?
爲什麼不'F1(A).left.map(_ + s 「用$失敗」)right'? – 2014-10-31 17:03:41
謝謝。你是對的。 – Michael 2014-10-31 17:08:13
是否有任何理由不將函數f1,f2,f3中的參數附加到錯誤消息中? – lea 2014-10-31 20:23:25