2012-01-31 12 views
15

क्या टाइपिंग जांच के साथ समानता करने के लिए एक समान विधि है? दुर्भाग्यस्केल समानता प्रकार जांच के साथ?

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

समानता ऑपरेटर == शिकायत नहीं करता है तो objectB एक इंट है, जबकि objectA एक स्ट्रिंग है। मुझे ऑपरेटर की आवश्यकता होगी जैसे कि === जो प्रकार की जांच भी करता है (और मुझे उम्मीद है कि यह सभी स्कैला ओब्जे के लिए समान है)। क्या ऐसा ऑपरेटर मौजूद है?

उत्तर

14

आप टाइप सुरक्षित बराबर होती है के लिए scalaz के === में देखने की जरूरत है - यह वहाँ प्रकार वर्ग के रूप में लागू है।

तुम भी Heiko Seeberger, जहां वह वर्णन करता है कि यह कैसे लागू हो जाता है से बात करते देख सकते हैं:

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

तुम भी यहाँ कुछ उदाहरण देख सकते हैं:

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

(में उदाहरण वे विधि का उपयोग कर रहे हैं, लेकिन यह === के लिए बस उपनाम है)

+0

हाँ, यह बहुत आसान, मैं खुद के द्वारा लागू किया है है – Matroska

8

स्कालाज़ ऐसे ऑपरेटर प्रदान करता है।

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

यह भी 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

स्केला दीवाना हो गया एक सुविधा है जो टाइप सुरक्षा की अनुमति देता है Multiversal Equality कहा जाता है।

नीचे डॉटी आरईपीएल उदाहरण है;

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 != 

Dotty स्काला के लिए एक अगली पीढ़ी के संकलक है - http://dotty.epfl.ch/#getting-started

संबंधित मुद्दे