Docs scala że Enumeration.Val jest uporządkowane, jednak otrzymuję niespójne zachowanie podczas gdy próbuję wymusić ograniczenia typu na wartości wyliczenia wymagając od nich wsparcie zamawiającego:Wartości wyliczenia Scala nie zostały zamówione?
object Dogs extends Enumeration {
val Sam, Tom, Rover = Value
}
def doSomething[A <% Ordered[A]](a : List[A]) : Unit = {
println(a.sortWith(_ < _))
}
import Dogs._
val xs = List(Rover, Tom, Sam, Sam, Rover)
println(xs.sortWith(_ < _)) // works!
doSomething(xs) // fails =(
ostatnich dwóch sprawozdań, pierwszy działa i pokazuje, że wartości wyliczeniowe mają zdefiniowane porządkowanie. Drugi daje błąd:
could not find implicit value for evidence parameter of type (this.Dogs.Value) => Ordered[this.Dogs.Value]
Jak obejść ten problem i użyć wartości wyliczeniowych w ogólnych metodach wymagających zamawiania?
Dzięki @retronym, ten ostatni przykład rozwiązał mój problem, chociaż mój umysł zgiął się od słabszych ograniczeń typu! Wymaga on teraz dowolnego typu A, pod warunkiem, że A może być traktowany jako (to znaczy jest, lub może zostać przekonwertowany) na coś Zlecony przez uogólnienie A. Czy to prawda? –