类型参数以确保关系运算符

rev*_*end 2 generics types scala

我一直在尝试确定如何编写一个类型参数,将函数限制为支持关系运算符的类型?

例如:

def biggerOf[A <: ???](a: A, b: A): A = { if (a > b) a else b }
Run Code Online (Sandbox Code Playgroud)

???我的困境在哪里。高级类型参数位对我来说是新的,所以寻求一点帮助。认为 AnyVal 可能是赢家,但对于 Unit 类型(和 Boolean 不会中断,但也不会起作用)。感谢您的任何想法。

jwv*_*wvh 5

您想使Ordering类型类发挥作用。

import scala.math.Ordering.Implicits.infixOrderingOps

def biggerOf[A:Ordering](a: A, b: A): A = { if (a > b) a else b }
Run Code Online (Sandbox Code Playgroud)

A:Ordering限制A到在类型Ordering类型类和infixOrderingOps能够使便利性运算符(方法),诸如<>=