Stange在Scala中使用隐式返回类型

问题描述:

我无法理解。为什么每个函数使用类型约束都有不同的返回类型。Stange在Scala中使用隐式返回类型

起初我并让功能inv像下面,和它的返回类型为int

implicit val x = 10 
def inv[A](a: A)(implicit ev: Int) = ev 
inv(1) // it return 10 

// res0: Int = 10 

然后我做了让功能inv2中包含类型的限制,而且它的返回类型为功能1

def inv2[A](a: A)(implicit ev: Int <:< Int) = ev 
inv2(1) 

// res2: <:<[Int,Int] = <function1> 

inv2的返回类型被推断为<:<[Int,Int] - 与预期的一样。

但是,返回值的运行时类型为Int => Int。那是因为<:<的一个函数。

sealed abstract class <:<[-From, +To] extends (From => To) with Serializable 

而调用<function1>上的函数结果toString被打印。