В scala, мы можем использовать неявные классы типов для условного добавления методов к параметризованному типу в зависимости от параметров этого типа. Например, Iterator.sum
:
def sum[B >: A](implicit num: Numeric[B]): B = foldLeft(num.zero)(num.plus)
Должен существовать экземпляр класса типов Numeric
, чтобы этот метод мог даже вызываться:
scala> List(1, 2, 3).sum
res0: Int = 6
scala> List("a", "b").sum
<console>:6: error: could not find implicit value for parameter num: Numeric[java.lang.String]
List("a", "b").sum
^
Пока все хорошо. Скажем, я хочу иметь какой-то тип коллекции, My2Col
:
class My2Col[A](a1 : A, a2 : A)
Но я хочу указать это, если это делается с помощью A: Numeric
, , затем a2> a1
. Тем не менее, полностью , чтобы он был сделан с A
, который не является числовым.
My2Col("a", "b") //OK
My2Col("b", "a") //OK
My2Col(1, 2) //OK
My2Col(2, 1) //THROW IllegalArgumentException
Есть ли у кого-нибудь идеи относительно того, как я могу это сделать?
PS . Если у кого-то есть предложения по лучшему заголовку вопроса, я все слышу