Похоже, что в большинстве основных языков программирования возвращение нескольких значений из функции является крайне неловкой вещью.
Типичные решения - создать struct или простые старые данные class и вернуть их или передать хотя бы некоторые параметры по ссылке или указателю вместо возврата их.
Использование ссылок / указателей довольно неловко, потому что оно основано на побочных эффектах и означает, что вам нужно передать еще один параметр.
Решение класса / структуры также ИМХО довольно неловко, потому что в результате вы получаете миллион маленьких классов / структур, которые используются только для возврата значений из функций, создавая ненужный беспорядок и многословие.
Кроме того, во многих случаях всегда требуется одно возвращаемое значение, а остальные используются вызывающей стороной только в определенных обстоятельствах. Ни одно из этих решений не позволяет вызывающей стороне игнорировать ненужные типы возврата.
Единственный известный мне язык, который элегантно обрабатывает несколько возвращаемых значений, - это Python. Для тех из вас, кто незнаком, он использует распаковку кортежей:
a, b = foo(c) # a and b are regular variables.
myTuple = foo(c) # myTuple is a tuple of (a, b)
Есть ли у кого-нибудь еще хорошие решения этой проблемы? Приветствуются обе идиомы, которые работают на существующих основных языках, кроме Python и решений на уровне языка, которые вы видели на неосновных языках.