Моя основна мова введена статично (Java). У Java вам потрібно повернути один тип із кожного методу. Наприклад, у вас не може бути методу, який умовно повертає a String
або умовно повертає Integer
. Але в JavaScript, наприклад, це дуже можливо.
Статично набраною мовою я розумію, чому це погана ідея. Якщо кожен метод повертається Object
(загальний батьківський від успадкованих всіх класів), ви та компілятор не маєте поняття, з чим маєте справу. Вам доведеться виявити всі свої помилки під час виконання.
Але в динамічно набраній мові може навіть не бути компілятора. У динамічно набраній мові мені не очевидно, чому функція, яка повертає кілька типів, є поганою ідеєю. Моє перебіг статичних мов змушує мене уникати написання таких функцій, але я побоююсь, що мене дуже розуміють щодо функції, яка могла б зробити чистішим кодом способи, які я не бачу.
Редагувати : я збираюсь прибрати свій приклад (поки я не зможу придумати кращий). Я думаю, що це спрямовуючи людей відповідати на точку, яку я не намагаюся зробити.
(coerce var 'string)
отримуємо а string
або (concatenate 'string this that the-other-thing)
аналогічно. Я також писав такі речі ThingLoader.getThingById (Class<extends FindableThing> klass, long id)
. І там я можу повернути лише те, що підкласи того, про що ви просили: loader.getThingById (SubclassA.class, 14)
може повернути розширення, SubclassB
яке розширюється SubclassA
...