scala – 为什么在Option [T]的HList上映射不起作用?
发布时间:2020-12-16 18:56:08 所属栏目:安全 来源:网络整理
导读:这不编译,我不明白为什么: import shapeless._import poly._object option extends (Option ~ List) { def apply[T](t: Option[T]) = t.toList}val simple = Some(1) :: Some("hello") :: Some(true) :: HNilval opts: List[Int] :: List[String] :: List[B
这不编译,我不明白为什么:
import shapeless._ import poly._ object option extends (Option ~> List) { def apply[T](t: Option[T]) = t.toList } val simple = Some(1) :: Some("hello") :: Some(true) :: HNil val opts: List[Int] :: List[String] :: List[Boolean] :: HNil = simple map option 这有点令人惊讶,因为这确实编译: import shapeless._ import poly._ object choose extends (Set ~> Option) { def apply[T](s: Set[T]) = s.headOption } val sets = Set(1) :: Set("foo") :: HNil val opts: Option[Int] :: Option[String] :: HNil = sets map choose 解决方法
问题是你使用Some而不是Option.虽然正在使用Option mapper,但编译器仍抱怨它找不到任何转换Somes列表的内容.要解决此问题,您可以:
将简单列表构造更改为使用Option而不是Some: object option extends (Option ~> List) { def apply[T](t: Option[T]) = t.toList } val simple = Option(1) :: Option("hello") :: Option(true) :: HNil val opts2: List[Int] :: List[String] :: List[Boolean] :: HNil = simple map option 使用Some作为映射器的类型: object option extends (Some ~> List) { def apply[T](t: Some[T]) = t.toList } val simple = Some(1) :: Some("hello") :: Some(true) :: HNil val opts2: List[Int] :: List[String] :: List[Boolean] :: HNil = simple map option 或者强制简单的类型向下转换为Option: object option extends (Option ~> List) { def apply[T](t: Option[T]) = t.toList } val simple: Option[Int] :: Option[String] :: Option[Boolean] :: HNil = Some(1) :: Some("hello") :: Some(true) :: HNil val opts2: List[Int] :: List[String] :: List[Boolean] :: HNil = simple map option (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- angular – 使用异步管道在模板中的多个位置使用相同的obse
- bootstrap入门 css栅格系统
- 使用scala进行GUI编程:我可以使用哪些库和工具?
- webservice Axis发布deploy.wsdd出错, {http://xml.apache
- Scala中的方法级高级绑定类型
- twitter-bootstrap-3 – 使用ASP.NET MVC 5和Bootstrap 3默
- axis2.1.4 访问https webservices
- Axis部署开发webservice (三种方式全)
- scala – 如何使用Spark Structured Streaming连续监视目录
- webService