我有一个我想要解除的功能2:
def myFunction(a: String, b: String): String
我想通过签名获得该功能
def myFunction2(a: Option[String], b: Option[String]: Option[String]
如果任何参数是None
,它应该返回None
。在斯卡拉兹,那个案件有Applicative.lift2
,但我找不到同样的cats
。
我怎么能用cats
做同样的事情?怎么样lift3
,......?
你在寻找的是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
。