我正在阅读这篇关于使用Reader monad进行scala依赖注入的精彩文章.
原始示例运行良好,但我对返回类型做了一点改动UserRepository.get/find.是的User,但我把它改成了Try[User].
然后代码将不会编译,我已经多次尝试,但仍然没有幸运.
import scala.util.Try
import scalaz.Reader
case class User(email: String, supervisorId: Int, firstName: String, lastName: String)
trait UserRepository {
def get(id: Int): Try[User]
def find(username: String): Try[User]
}
trait Users {
def getUser(id: Int) = Reader((userRepository: UserRepository) =>
userRepository.get(id)
)
def findUser(username: String) = Reader((userRepository: UserRepository) =>
userRepository.find(username)
)
}
object UserInfo extends Users {
def userEmail(id: Int) = {
getUser(id) map (ut => ut.map(_.email))
}
def userInfo(username: String) = …Run Code Online (Sandbox Code Playgroud)