理论教育 实战:Scala语言基础与开发的类型证明使用示例

实战:Scala语言基础与开发的类型证明使用示例

时间:2023-11-24 理论教育 版权反馈
【摘要】:类型证明中的隐匿参数具体使用示例如例8-4所示。例8-4第3行代码定义了一个泛型函数,函数有个隐式参数,该隐式参数使用类型证明对泛型参数进行约束,要求泛型参数T必须是java.io.Serializable的子类,第5行代码能够顺利运行的原因是String类型实现了java.io.Serializable接口,满足类型证明条件,而第7行代码编译出错则是因为Int类型不是java.io.Serializable的子类。类型证明<:<与类型变量界定<:有什么区别呢[2]?

实战:Scala语言基础与开发的类型证明使用示例

类型证明中的隐匿参数具体使用示例如例8-4所示。本例通过在def test[T](name:T)(implicit ev:T<:<java.io.Serializable)方法中加入隐式参数ev并将隐式参数类型声明为T<:<java.io.Serializable,从而达到对参数的类型进行证明的目的。

【例8-4】类型证明中的隐式参数使用示例。

例8-4第3行代码定义了一个泛型函数,函数有个隐式参数,该隐式参数使用类型证明对泛型参数进行约束,要求泛型参数T必须是java.io.Serializable的子类,第5行代码能够顺利运行的原因是String类型实现了java.io.Serializable接口,满足类型证明条件,而第7行代码编译出错则是因为Int类型不是java.io.Serializable的子类。第3行代码的test函数有个隐式参数,但在使用时并没有指定相应的隐式值,为什么这样也是合法的呢?这是因为Pre⁃def中的conforms方法会产生一个隐式值。

类型证明<:<与类型变量界定<:有什么区别呢[2]?从下面的代码来看:(www.daowen.com)

看上去两者之间并没有什么具体的区别,但其实它们之间还是有很大差异的,下面的代码给出的是其在一般函数使用上的差别:

第5行、第12行代码展示了<:、<:<之间的区别,类型变量界定<:在类型不匹配时会采用父类进行匹配,而类型证明<:<会严格匹配。下面的代码给出的是其在隐式转换使用上的差别:

第12行、第17行代码给出了<:、<:<在隐式转换上时使用的区别,类型变量界定<:在不匹配时会通过隐式转换来进行匹配,而类型证明<:<则不会。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈