如何在Scala中简化此表达式?

如何在Scala中简化此表达式?,scala,Scala,我有下面的表达式,希望通过了解如何简化它来学习Scala val r : Either[Exception, Long] = Right(100) r fold (_ => (), uuid => account.setAccountUuid(uuid.toString)) 有没有可能让它比这更不冗长 谢谢 我最初的答案是r.right foreach account.setAccountUuid_uuuid.toString,但结果是它触发了可怕的缺少参数类型的扩展函数错误。我应

我有下面的表达式,希望通过了解如何简化它来学习Scala

val r : Either[Exception, Long] = Right(100)
r fold (_ => (), uuid => account.setAccountUuid(uuid.toString))
有没有可能让它比这更不冗长

谢谢

我最初的答案是r.right foreach account.setAccountUuid_uuuid.toString,但结果是它触发了可怕的缺少参数类型的扩展函数错误。我应该让他来的。 那么:

for (i <- r.right) account.setAccountUuid(i.toString)

请原谅我的套语:

if ( r.isRight ) account.setAccountUuid(r.right.get.toString)
可读性不重要吗???有时候Scala社区似乎都很热心——对不起,我指的是monad持有者


更新以更正TravisBrown的catch missing get。

讽刺的是,r.right.toString将为您提供正确投影的字符串表示,即RightProjectionRightfoo,如果您使用该锤子,几乎肯定不会遇到该错误。@TravisBrown哎哟!不过,它强化了我对可读性的基本关注。您应该能够通过指定如下参数来使用foreach:r.right.foreachi=>account.setAccountUuidi.toString。或者,r.right.map_u.toString.foreachaccount.setAccountUuid.Agreed,您的第一个备选方案在可读性方面是相同的,尽管稍长一些。但是,您的第二个备选方案看起来并不重要,实际上也不会编译,因为RightProjection.map返回的是一个非此即彼的RightProjection。所以你需要在foreach之前再打一个调用,使它变得更加详细。这是一个很好的捕获,我没有先通过编译器,这对我来说是一个很好的服务!
if ( r.isRight ) account.setAccountUuid(r.right.get.toString)