Quiero escribir una función que funcione en cualquier tipo de Scala con un total de pedidos (es decir, puedo usar '<' en él). ¿Cuál es la sintaxis para eso? El mejor que he llegado con es¿Cuál es la sintaxis de Scala para una función que toma cualquier subtipo de Ordenado [A]?
def lessThan[T <: Ordered[T]](x: T, Y: T) = x < y
eso no funciona, sin embargo, cuando intento usarlo desde el REPL:
scala> lessThan(1, 2)
<console>:8: error: inferred type arguments [Int] do not conform to method lessThan's type parameter bounds [T <: Ordered[T]]
lessThan(1, 2)
^
scala> import runtime._
import runtime._
scala> lessThan(new RichInt(1), new RichInt(2))
<console>:8: error: inferred type arguments [scala.runtime.RichInt] do not conform to method lessThan's type parameter bounds [T <: Ordered[T]]
lessThan(new RichInt(1), new RichInt(2))
Esencialmente, creo que quiero que el equivalente de esta Código Haskell:
lessThan :: (Ord a) => a -> a -> Bool
lessThan x y = x < y
Estoy usando scala 2.7.3 en un sistema Debian.
¿Qué me estoy perdiendo y dónde?
¿Por qué tiene que incluir explícitamente lo implícito como parámetro del método? Si el Scala-Runtime sabe cómo convertir implícitamente T en Ordenado [T], ¿por qué necesito enumerar un parámetro implícito? ¡Gracias! – shj
En primer lugar, no puede convertir cualquier T en un Pedido [T]. Por ejemplo, defina un orden sobre (Int => Int). En segundo lugar, cuando la conversión es posible, el tiempo de ejecución no sabe cómo convertir. En cambio, el compilador sabe cómo insertar una función para hacer la conversión en tiempo de ejecución. –
parece que el primer método está en desuso [SI-7629] (https://issues.scala-lang.org/browse/SI-7629) –