是否有統一的方法來執行與類型檢查相等? 不幸的是斯卡拉與類型檢查相等嗎?
val objectA:String = "test"
val objectB:Int = 2
objectA == objectB
相等的==操作符不抱怨,如果對象B是一個詮釋,而對象A是一個字符串。 我需要像===這樣的運算符來執行類型檢查(我希望它對所有的scala obj都是一致的)。這樣的操作符存在嗎?
是否有統一的方法來執行與類型檢查相等? 不幸的是斯卡拉與類型檢查相等嗎?
val objectA:String = "test"
val objectB:Int = 2
objectA == objectB
相等的==操作符不抱怨,如果對象B是一個詮釋,而對象A是一個字符串。 我需要像===這樣的運算符來執行類型檢查(我希望它對所有的scala obj都是一致的)。這樣的操作符存在嗎?
你需要看的===scalaz的類型安全等於 - 它的類型班上有落實。
您還可以觀看談話由Heiko Seeberger,在那裏,他介紹了它是如何實現的:
http://days2011.scala-lang.org/node/138/275
你也可以在這裏找到一些例子:
(在例子,他們正在使用≟
方法,但它只是===
的別名)
斯卡拉斯提供這樣一個操作符。
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
這也是由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")
^
斯卡拉瘋瘋癲癲有一個叫做Multiversal Equality功能,它允許類型安全。
下面是dotty REPL的例子;
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 !=
斑點狗是斯卡拉下一代編譯器 - http://dotty.epfl.ch/#getting-started
是的,這是很容易的,我已經獨自實施 – Matroska 2012-01-31 19:44:00