ger*_*s.b 2 functional-programming scala functor applicative scala-cats
我将通过https://www.scala-exercises.org/获取Cats。我想我明白是什么意思了Apply.ap。但我看不到它有任何用途。
有什么区别:
Apply[Option].map(Some(1))(intToString)
Run Code Online (Sandbox Code Playgroud)
和
Apply[Option].ap(Some(intToString))(Some(1))
Run Code Online (Sandbox Code Playgroud)
有人可以解释一下或指出更多解释吗?
之间没有区别
Apply[Option].map(Some(1))(intToString)
Run Code Online (Sandbox Code Playgroud)
和
Apply[Option].ap(Some(intToString))(Some(1))
Run Code Online (Sandbox Code Playgroud)
两者都是Some("1")。
map但和之间有很大的区别ap。
map来自类型类Functor并具有签名
def map[A, B](fa: F[A])(f: A => B): F[B]
Run Code Online (Sandbox Code Playgroud)
ap来自类型类Apply并具有签名
def ap[A, B](ff: F[A => B])(fa: F[A]): F[B]
Run Code Online (Sandbox Code Playgroud)
因此,map将函数 A => B应用于上下文中的值F[A],同时ap将上下文中的函数 应用于上下文中的值。F[A => B] F[A]
例如
Apply[List].map(List(1, 2))(intToString)
Run Code Online (Sandbox Code Playgroud)
是List("1", "2")同时
Apply[List].ap(List(intToString, (i: Int) => intToString(i) + "a"))(List(1, 2))
Run Code Online (Sandbox Code Playgroud)
是List("1", "2", "1a", "2a")。
Apply[Option].map(fx)(f)None仅当fxis时才可以为NonewhileApply[Option].ap(ff)(fx)可以为is或isNone时。fxNoneffNone