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

问题描述 投票:1回答:1

我有一个我想要解除的功能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,......?

scala function scala-cats
1个回答
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

© www.soinside.com 2019 - 2024. All rights reserved.