在scala +猫中应用提升function2,function3,...

时间:2017-12-29 07:55:36

标签: scala function scala-cats

我有一个我想解除的功能2:

def myFunction(a: String, b: String): String

我想用签名

获得该功能
def myFunction2(a: Option[String], b: Option[String]: Option[String]

如果任何参数为None,则应返回None。在Scalaz中,该案例有Applicative.lift2,但我找不到cats的相同内容。

我如何对cats做同样的事情?那么lift3,......?

1 个答案:

答案 0 :(得分:2)

您要找的是Apply.ap2。以下是使用Apply.ap2实现的示例。

 import cats.implicits._

 def myFunction(a: String, b: String): String =
   a + b

 def myFunction2(a: Option[String], b: Option[String]): Option[String] =
   Apply[Option].ap2(Some(myFunction _))(a, b)

 assert(myFunction("a", "b") === "ab")
 assert(myFunction2(Some("a"), Some("b")) === Some("ab"))
 assert(myFunction2(Some("a"), None) === None)

您还有ap个函数用于更多参数(在ApplyArityFunctions中定义),最多为ap22