用身份映射和应用副作用的模式

Mar*_*lic 3 monads scala side-effects

是否有更清晰的方式表达以下模式:

def getUser(id: String): Option[User] = ???

getUser("12345").map { user =>
  someSideEffect(user)
  user
}
Run Code Online (Sandbox Code Playgroud)

注意给定一个仿函数我们如何使用标识函数进行映射,还将副作用函数应用于盒装值.

Future.andThen 这样做:

将副作用函数应用于此未来的结果,并返回具有此未来结果的新未来.

Future.andThen对于任何仿函数,是否有类似但一般的情况?

Dim*_*ima 5

没有任何开箱即用的东西.人们通常会添加如下内容:

 object ImplicitUtils {
    implicit class Utils[T](val t: T) extends AnyVal {
       def tap(f: T => Unit): T = { f(t) ; t }
    }
 }
Run Code Online (Sandbox Code Playgroud)

所以,现在你可以写:

 import ImplicitUtils._
 val user = getUser("foo").tap(someSideEffect)
Run Code Online (Sandbox Code Playgroud)