平面图选项值

时间:2016-10-12 19:47:43

标签: scala

为什么flatMap在这种情况下不起作用,有人可以详细说明发生了什么。

${project.build.directory}

4 个答案:

答案 0 :(得分:2)

  

我认为recView.getRecycledViewPool().setMaxRecycledViews(TYPE_XXXX, 0); 需要一个flatMap,这背后的推理。

这不是一个人们要求高度多态函数的问题。它就是这样,只是OptionflatMap的定义。

Scala API中的所有这些Option方法都是一致的,因为它们大致对应Control.Monad中的Haskell函数flatMap

有些方法可以做你想要的事情((>>=) :: m a -> (a -> m b) -> m b),但它们是不同的方法,具有不同的名称和不同的类型。

答案 1 :(得分:1)

因为println返回Unit而不是Option[T]的新实例。 Flatmap用于转换值(如果存在)并将其映射到新的Option[T]

您使用println所做的事情可以通过以下方式完成:

o.foreach(println)

答案 2 :(得分:1)

基本上,并没有试图100%正确,但更多的尝试提供一个很好的概述,你有:

  • 集合(如Lists和Sets)和其他一些容器(如Option)有一个:reference方法应用于内部元素(如果是列表,它会使用您提供的函数转换每个元素。 Option的情况是使用您提供的函数转换唯一的元素)
  • 集合和(某些)容器也有一个with_ref, without_ref = arr1.partition { |h| h[:reference] } / with_ref.sort_by! { |h| h[:reference] } 方法,它将一个嵌套集合(列表列表包含所有元素,或Option of Option to Option)
  • flatmap是一个地图,后面是flatten。为了使用它,你的map函数/转换必须返回一个集合/容器

虽然不是100%正确,但它应该足以让你开始并理解:)

答案 3 :(得分:1)

我认为应该只关注功能签名。

在这种情况下,可以找到here

它说def flatMap[B](f: (A) ⇒ Option[B]): Option[B]

但是你传递的f有不同的签名。 具体来说是def println(x: Any): Unit