`() => Unit` 是什么意思?

3

就像问题所说的那样。

这个是在List[() => Unit]中发现的,该列表用于存储回调函数。

我理解List[type],而Unit是一个不返回任何内容的函数的返回类型。

2个回答

8

(T1,...,Tn) => T 是一个函数类型,它接受 T1Tn 类型的参数,并返回 T 类型。因此,() => Unit 是一个不接受任何参数且返回 Unit 类型的函数类型。因此,List[() => Unit] 是包含此类函数的列表类型。


“类型T1到Tn的参数”,这样函数如f(T1):Unitf(T2):Unit将是该列表的有效类型吗?那么像f(T1,T2)这样的函数呢? - Jesvin Jose
2
@aitchnyu 不可以。如果你有一个类型为 List[(T1, T2) => Unit] 的列表,那么该列表存储的是带有两个参数(第一个参数类型为 T1,第二个参数类型为 T2)并返回类型为 Unit 的函数。因此,你可以在其中存储一个定义为 f(x:T1, y:T2):Unit 的函数,但不能存储一个定义为 f(x:T1) 或者 f(y:T2) 的函数。同样地,类型为 List[() => Unit] 的列表只能存储不带任何参数的函数。 - sepp2k

4
首先,你有一个函数列表。每个函数不带参数(这就是括号()的含义),并返回Unit,这是一种无结果值,类似于void。
在一个纯函数式世界中,类型为()=>Unit的函数是无用的,因为它既不需要输入,也不需要输出。但是,Scala不是一个纯粹的函数式语言;它具有副作用。为了有用,列表中的函数肯定会产生副作用。由于它们是回调函数,它们也会有关于何时触发的想法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接