|
|
|
|
|
by JoeAltmaier
3897 days ago
|
|
Only if you do it that way. Make it MatchForParticularPurpose(v1, v2) instead, and voila no leak. Operators are unique in the language. They hold a special place. They deliberately are written to imply something we already understand. No fair lumping them in with every other attribute or method of an encapsulated type. Intuition is a very, very poor thing to depend upon in a programming language. I disagree heartily that it should be the solution to disambiguating any operation. |
|
Making the name more opaque won't save you at all. You're making what should be a local detail -- how your type implements equality -- into something that only works when it is global knowledge.
Consequently, your type is brittle and incomposable with types that aren't infected with this knowledge:
won't do anything sensible until we infect either the Array type or the call site with non-local knowledge about your type.Every type you build in this manner will find knowledge about itself diffusing throughout your application, like children peeing in a pool. Composition will be limited, inflexible, and require manual insertion of type-specific knowledge, because you have failed to encapsulate knowledge about equality.
Everything needs to know about everything else, and in the end you've built a tightly coupled ball of mud.