我在使用Monix流的代码中找到了这个foreach(_ => ())
,但我不明白它的含义。有人可以给我解释一下吗?
monix_concurrent_subject.foreach(_ => ())
答案 0 :(得分:7)
urmaul 在评论中解释,具体取决于:
如果数据结构是急切的,它什么也不做。例如List
,Option
等。
如果数据结构是惰性的,则会初始化其内容。一个示例是Stream
。
foreach
也不返回任何内容,这意味着foreach
之前的代码中某处将是副作用。
如果您检查API(ConcurrentSubject.html#foreach),则会显示:
foreachL(cb: (O) ⇒ Unit): Task[Unit]
创建一个新任务,该任务将消耗可观察的源,并为每个元素执行给定的回调。
答案 1 :(得分:3)
()
表示类型为Unit
的 the 值。它看起来可能很不寻常,但它仍然是真实的值,类似于42
如何表示Int
类型的值。例如,我们可以写
val u: Unit = ()
类似于
val i: Int = 42
()
除了表明函数中出现了某些副作用以外,没有其他意义。
现在考虑以下类型为Int => Unit
的功能
(x: Int) => ()
请注意,如何使用x
右边的参数=>
不执行任何操作,也就是说,根本不使用它。我们可以使用下划线_
(_: Int) => ()
甚至简单地
_ => ()
如果类型推断可以找出类型。在此函数上应用参数
((x: Int) => ())(42)
没有任何有趣的结果。因此,将这些部分放在一起,我们可能会得到以下_ => ()
含义的解释:
尽管_ => ()
没有直接作用,如pme所述,当传递给foreach
时,它可能有一些间接作用。
关于
monix_concurrent_subject.foreach(_ => ())
在我看来foreach(_ => ())
在某种程度上更像是实现monix_concurrent_subject
应该真正提供适当方法的东西。