为什么flatMap在这种情况下不起作用,有人可以详细说明发生了什么。
${project.build.directory}
答案 0 :(得分:2)
我认为
recView.getRecycledViewPool().setMaxRecycledViews(TYPE_XXXX, 0);
需要一个flatMap
,这背后的推理。
这不是一个人们要求高度多态函数的问题。它就是这样,只是Option
上flatMap
的定义。
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%正确,但更多的尝试提供一个很好的概述,你有:
:reference
方法应用于内部元素(如果是列表,它会使用您提供的函数转换每个元素。 Option的情况是使用您提供的函数转换唯一的元素)with_ref, without_ref = arr1.partition { |h| h[:reference] }
/ with_ref.sort_by! { |h| h[:reference] }
方法,它将一个嵌套集合(列表列表包含所有元素,或Option of Option to Option)虽然不是100%正确,但它应该足以让你开始并理解:)
答案 3 :(得分:1)
我认为应该只关注功能签名。
在这种情况下,可以找到here。
它说def flatMap[B](f: (A) ⇒ Option[B]): Option[B]
但是你传递的f
有不同的签名。
具体来说是def println(x: Any): Unit