Qualcuno può spiegarmi perché il tipo di conversione implicita non funziona con ==
?Conversione di tipo implicito di scala e ==
Esempio:
class BitArray(l: Int, v: Long) {
val length = l
var value = v
def ==(that: BitArray) = value == that.value
def ==(integer: Long) = value == integer
def +(that: BitArray) = new BitArray(length,value+that.value)
def +(integer: Long) = new BitArray(length,value+integer)
//...
}
object BitArray{
implicit def longToBitArray(x : Long) = new BitArray(64,x)
def apply(v: Long) :BitArray = apply(64,v)
}
Ora posso fare:
scala> BitArray(5) + 5
res13: BitArray = 00000000000000000000000000001010
scala> 5 + BitArray(5)
res14: BitArray = 00000000000000000000000000001010
scala> BitArray(5) == 5
res15: Boolean = true
scala> BitArray(5) == 6
res16: Boolean = false
MA:
scala> 5 == BitArray(5)
<console>:11: warning: comparing values of types Int and BitArray using `==' will
always yield false
5 == BitArray(5)
^
res17: Boolean = false
Grazie per la risposta molto chiara :-) –
Non tanto un aspetto fondamentale di Scala, ma un aspetto di come la libreria standard è fondamentalmente rotta. – Apocalisp
@Apocalisp intendevo fondamentale come in "devi saperlo se vuoi usare Scala". –