Scala从列表[A]升级到列表[选项[A]]

时间:2017-01-06 16:09:27

标签: scala scalaz lifting

在scala中,如何创建通用函数来执行以下操作:

f: List[A] ==> List[Option[A]]

2 个答案:

答案 0 :(得分:6)

它不像_.map(Option.apply)那么简单吗?

答案 1 :(得分:3)

如果您希望所有元素都是Some(...)(就像您在评论中提到的那样),请使用以下内容:

scala> def f[A](in: List[A]): List[Option[A]] = in.map(Some(_))
f: [A](in: List[A])List[Option[A]]

scala> f(0 to 5 toList)
warning: there was one feature warning; re-run with -feature for details
res4: List[Option[Int]] = List(Some(0), Some(1), Some(2), Some(3), Some(4), Some(5))

scala> f(List("a", "b", null))
res5: List[Option[String]] = List(Some(a), Some(b), Some(null))

@ 2rs2ts的回答会给你:

scala> def f_2rs2ts[A](in: List[A]): List[Option[A]] = in.map(Option.apply)
f_2rs2ts: [A](in: List[A])List[Option[A]]

scala> f_2rs2ts(List("a", "b", null))
res6: List[Option[String]] = List(Some(a), Some(b), None)