2012-01-31 10 views
15

¿Existe un método uniforme para realizar la igualdad con la verificación de tipos? Desafortunadamente ¿Igualdad de Scala con verificación de tipo?

val objectA:String = "test" 
val objectB:Int = 2 
objectA == objectB 

el operador de igualdad == no se queja si objectB es un Int mientras Objecta es una cadena. Necesitaría un operador como === que también realice una verificación de tipo (y espero que sea uniforme para todos los scala obj). ¿Existe tal operador?

Respuesta

14

que hay que buscar en scalaz 's === para el tipo de fallos es igual - se implementa como la clase de tipo allí.

También puede ver charla de Heiko Seeberger, en el que describe cómo se implementa:

http://days2011.scala-lang.org/node/138/275

También puede encontrar algunos ejemplos aquí:

http://scalaz.github.com/scalaz/scalaz-2.9.1-6.0.4/doc.sxr/scalaz/example/ExampleEqual.scala.html#24187

(en los ejemplos que están usando el método , pero es simplemente un alias para ===)

+0

sí, es muy fácil, he implementado por mí – Matroska

8

Scalaz proporciona un operador de este tipo.

scala> import scalaz._, Scalaz._ 
import scalaz._ 
import Scalaz._ 

scala> 4 === "Scala" 
<console>:14: error: type mismatch; 
found : java.lang.String("Scala") 
required: Int 
       4 === "Scala" 
        ^

scala> 4 === 4 
res7: Boolean = true 

scala> 4 === 5 
res8: Boolean = false 
2

Esto también es proporcionado por la biblioteca ScalaUtils:

import org.scalautils.TypeCheckedTripleEquals._ 

scala> "Scala" == Some("Scala") 
res1: Boolean = false 

scala> "Scala" === Some("Scala") 
<console>:11: error: types String and Some[String] do not adhere to the type 
    constraint selected for the === and !== operators; the missing implicit 
    parameter is of type org.scalautils.Constraint[String,Some[String]] 
       "Scala" === Some("Scala") 
        ^
0

Scala manchado tiene una característica llamada Multiversal Equality que permite escribir la seguridad.

A continuación se muestra el ejemplo REPLOSO;

scala> val data1 = "string" 
val data1: String = "string" 

scala> val data2 = Array(1, 2, 3, 4) 
val data2: Array[Int] = [[email protected] 

scala> val comparisonBool = data1 == data2 
1 |val comparisonBool = data1 == data2 
    |      ^^^^^^^^^^^^^^ 
    | Values of types String and Array[Int] cannot be compared with == or != 

manchado es un compilador próxima generación para la Scala - http://dotty.epfl.ch/#getting-started