operator overloading - overload - ¿Sobrecarga del operador aún no soportada?
sobrecarga de operadores c# (1)
De acuerdo con la Guía de programación Swift, la sobrecarga del operador está permitida y es bastante versátil. Sin embargo, no he podido hacerlo funcionar en el patio de recreo.
Por ejemplo, el protocolo Equatable
quiere esto: func ==(lhs:Self, rhs:Self) -> Bool
Digamos que hago una estructura simple de Location3D
:
struct Location3D
{
var x : Double
var y : Double
var z : Double
}
Ahora quiero que este Location3D
implemente el protocolo Equatable
, así que lo agrego junto con este método:
func ==(lhs: Self, rhs: Self) -> Bool
{
return lhs.x == rhs.x &&
lhs.y == rhs.y &&
lhs.z == rhs.z
}
Obtengo el error de compilación de los operadores solo son permitidos a nivel global . Eh
Así que intenté agregar @infix
a la función, mover la función a una extensión, cambiar el tipo a una clase en su lugar ... todo en vano.
¿Me estoy perdiendo de algo? ¿Cómo se supone que debes implementar Equtable
y Comparable
cuando los operadores parecen no funcionar?
Debe anular el operador == en el ámbito global pero con su tipo para los argumentos.
En este caso, significa que declara que su estructura se ajusta al protocolo y luego simplemente implementa la función fuera de su alcance.
struct Location3D : Equatable {
// ...
}
func ==(lhs: Location3D, rhs: Location3D) -> Bool {
// ...
}
Ver la referencia de la biblioteca para más discusión: