这是在Scala中定义函数的方式:
trait Function1 [-T1, +R] extends AnyRef
用英语来说,参数是变量
T1,结果类型
R是变量。这是什么意思?
当某些代码需要
Dog => Animal类型的函数时
Animal =>Animal,由于参数的矛盾性,您可以提供类型的函数(可以使用更广泛的类型)。
还可以提供
Dog => Dog类型的函数,这要归功于结果类型的协方差(可以使用更窄的类型)。
这实际上是有道理的:有人想要将狗转化为任何动物的功能。您可以提供可转换任何动物(包括狗)的功能。同样,您的函数只能返回狗,但是狗仍然是动物。



