理论教育 Scala开发中的上下文界定与隐式转换

Scala开发中的上下文界定与隐式转换

时间:2023-11-24 理论教育 版权反馈
【摘要】:上下文界定中的隐式转换示例。

Scala开发中的上下文界定与隐式转换

同视图界定一样,上下文界定(Context Bound)后面的实现原理同样是通过隐式转换来实现的,只不过上下文界定采用隐式值来实现,上下文界定的类型参数形式为T:M的形式,其中M是一个泛型,这种形式要求存在一个M[T]类型的隐式值。如例8-9所示。该例是上下文界定中的隐式转换使用,PersonOrdering继承Ordering[Person],类class Pair⁃Comparator[T:Ordering](val first:T,val second:T)中的类型参数为[T:Ordering],它表明当前作用域中必须存在一个Ordering[T]的隐式值,而PersonOrdering继承自Ordering[Per⁃son],在使用时定义这样一个隐式对象即可。

【例8-9】上下文界定中的隐式转换示例。

代码执行结果如下:(www.daowen.com)

通过代码运行结果可以看到,执行printIn(p.smaller)未给定参数,而是使用隐式值printIn(p.smaller)作为隐式参数。第2~9行代码定义了一个类PersonOrdering,该类扩展特质Ordering,实现了自己的compare方法。第15~22行代码定义了用于对两个进行比较的class PairComparator[T:Ordering](val first:T,val second:T)类,类的定义中使用了上下文界定[T:Ordering](在本例中T为Person类),这意味着在相应的作用域中必须存在一个隐式值Ordering[Person](第27行代码定义了该隐式值对象),该隐式值作用于第17行代码的smaller方法,作为方法的参数,从而实现了两个对象的比较。

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

我要反馈