2023-05-03 11:06:20 +02:00
== Why is this an issue?
2021-04-28 16:49:39 +02:00
It is acceptable to override standard operators to provide appropriate behaviors for your classes. But it is not appropriate to change those operators' associativity or precedence from the standard. Doing so will inevitably lead to misuse and mistakes for users of the class.
Instead of overriding an existing operator's associativity or precedence, you should either let them use the default values or define a completely new operator.
2021-04-28 18:08:03 +02:00
2023-05-03 11:06:20 +02:00
=== Noncompliant code example
2021-04-28 16:49:39 +02:00
2022-02-04 17:28:24 +01:00
[source,swift]
2021-04-28 16:49:39 +02:00
----
infix operator - : CustomAdditionPrecedence // Noncompliant. For a different behavior create a different operator
precedencegroup CustomAdditionPrecedence {
associativity: right
}
func - (lhs: MyInt, rhs: MyInt) -> MyInt {
// ...
}
var a = MyInt(10), b = MyInt(5), c = MyInt(5)
print(a - b - c) // against expectations, this outputs 10
----
2021-04-28 18:08:03 +02:00
2023-05-03 11:06:20 +02:00
=== Compliant solution
2021-04-28 16:49:39 +02:00
2022-02-04 17:28:24 +01:00
[source,swift]
2021-04-28 16:49:39 +02:00
----
infix operator <- : CustomAdditionPrecedence
precedencegroup CustomAdditionPrecedence {
associativity: right
}
func <- (lhs: MyInt, rhs: MyInt) -> MyInt {
// ...
}
var a = MyInt(10), b = MyInt(5), c = MyInt(5)
var a = MyInt(10), b = MyInt(5), c = MyInt(5)
print(a - b - c) // prints 0 as expected
print(a <- b <- c) // prints 10
----
2021-04-28 18:08:03 +02:00
2021-06-02 20:44:38 +02:00
2021-06-03 09:05:38 +02:00
ifdef::env-github,rspecator-view[]
2021-09-20 15:38:42 +02:00
'''
== Implementation Specification
(visible only on this page)
include::message.adoc[]
2021-06-08 15:52:13 +02:00
'''
2021-06-02 20:44:38 +02:00
== Comments And Links
(visible only on this page)
include::comments-and-links.adoc[]
2021-06-03 09:05:38 +02:00
endif::env-github,rspecator-view[]