Mój podstawowy język to statyczny typ (Java). W Javie musisz zwrócić jeden typ z każdej metody. Na przykład nie możesz mieć metody, która warunkowo zwraca a Stringlub warunkowo zwraca an Integer. Ale na przykład w JavaScript jest to bardzo możliwe.
W statycznie pisanym języku rozumiem, dlaczego to zły pomysł. Jeśli każda metoda zwróci Object(wspólny element nadrzędny, który dziedziczą wszystkie klasy), to Ty i kompilator nie macie pojęcia, z czym mamy do czynienia. Będziesz musiał odkryć wszystkie swoje błędy w czasie wykonywania.
Ale w dynamicznie pisanym języku może nie być nawet kompilatora. W dynamicznie pisanym języku nie jest dla mnie oczywiste, dlaczego funkcja zwracająca wiele typów jest złym pomysłem. Moje doświadczenie w językach statycznych sprawia, że unikam pisania takich funkcji, ale obawiam się, że jestem blisko myśli o funkcji, która może uczynić mój kod czystszym w sposób, którego nie widzę.
Edycja : zamierzam usunąć mój przykład (dopóki nie wymyślę lepszego). Myślę, że to kieruje ludźmi, aby odpowiedzieć na pytanie, którego nie próbuję rozwiązać.
(coerce var 'string)plony a stringlub (concatenate 'string this that the-other-thing)podobnie. Pisałem też takie rzeczy ThingLoader.getThingById (Class<extends FindableThing> klass, long id). I tam mogę zwrócić tylko coś, co loader.getThingById (SubclassA.class, 14)SubclassBSubclassA