2 ms·
My point was that the dynamic technique in the posted code was written in a very small, contained point where it would be impossible due to the signature of the
by lacampbell 10y ago
My point was that the dynamic technique in the posted code was written in a very small, contained point where it would be impossible due to the signature of the surrounding argument for it to go wrong.
void React(Animal me, Animal other)
{
ReactSpecialization(me as dynamic, other as dynamic);
}
Unless you pass in a casted value here, it's fool proof.
- lmm 10y agoThe point is that if you forget to write one of the ReactSpecialization methods nothing detects it. Perhaps more importantly, if you add a new type of Animal there's nothing to tell you you need to write a bunch of new ReactSpecializations.
- lacampbell 10y agoAha! There's the crux of an argument. It's a valid point actually, that ties into the expression problem. As an OO apologist I do feel compelled to point out that type Animal = Cat | Dog | Mouse let react = function (a, b) | Cat, Dog -> ... ... | x, y -> $"{x} is not interested in {y}." Would suffer from the exact same issue though.
- lmm 10y agoOnly if you deliberately add the catch-all case. If you don't and just handle all the cases explicitly, many languages will give you a warning or error when you add a new unhandled variant.
- lacampbell 10y agoYeah, it's a valid point.