Два метода на Julia, f(x::Integer, y::Number) и f(x::Number, y::Integer). Каждый запускает свой алгоритм, подобранный под тот аргумент, который целый. f(2, 3.0) попадает в первый, f(2.0, 3) во второй. Пока всё гладко.
Теперь превратим это число с плавающей точкой в целое. f(2, 3) подходит под оба метода, ни одна сигнатура не специфичнее другой по обеим позициям, и Julia вместо догадок выдаёт ошибку неоднозначности. Справедливо.
Руководство предлагает третий метод, f(x::Integer, y::Integer), для пересечения. Добавили, и ошибки нет. Только он ничего не говорит о том, каким должен быть ответ. Считать ли пару целых отдельным математическим случаем или сознательно отдать её одному из двух алгоритмов? Ошибка неоднозначности оказалась простой частью. Исходным двум методам не приходилось это решать, а теперь кому-то придётся.