【发布时间】:2014-12-05 15:16:43
【问题描述】:
我有一些函数 (f2..fn) 接受 A,并返回 Option[A]。这很好用(假设 f1:X => Option[A])来做例如
f1(x) flatMap f2 flatMap f3
现在我希望能够记录发生的事情,尤其是在引入 None 的地方。我希望能够插入一个函数,例如:
log_none(m:String):Option[A] => Option[A]
如果遇到 None 则会产生日志记录的副作用。
选项功能似乎都不适用于此(在阅读例如 tonymorris.github.io/blog/posts/scalaoption-cheat-sheet/ 之后)
理想情况下,它看起来像这样:
f1(x) <.> log_none("f1 failed") flatMap f2 <.> log_none("f2 failed") ...
我无法立即看到一种优雅、惯用的方式来做到这一点 - 我看不到任何可以放在 <.> 位置的东西。
【问题讨论】:
-
很好的答案,我都喜欢。我认为 andThen 最接近我的要求,隐式类对现有代码的损害最小,而 scalaz 可能是最正确的方法。所以不知道该接受哪一个。我将尝试隐式类,看看效果如何。
标签: scala