Variable number of arguments (Swift / С++ / Ruby)
Variable number of arguments
В очередной раз пытаюсь начать изучать Swift. И в очередной раз натыкаюсь на совершенно странные на мой взгляд вещи. Вот например, в Swift есть параметры функций переменной длины. Берем пример прямо из книги от эплов о свифте:Swift sum |
НО
Дальше в книге просят написать функцию, которая посчитает среднее параметров. Вроде-бы все хорошо, сумма у нас уже есть. Нужно поделить сумму на количетво элементов.
Пробуем:
Пробуем:
И тут оказывается, что функция sum не может принять наши args как аргументы. И xcode как-то очень туманно нас подводит к этой мысли:
error: '[Int]' is not convertible to 'Int'
Начинаем гуглить, и оказывается, что это не баг, а фича. Поскольку список аргуметнов превращается в массив, то просто так передать его в функцию, которая принимает список аргументов нельзя. Единственный вариант - это создать еще одну функцию, которая будет принимать на вход массив:
И вот теперь, мы можем написать функцию для подсчета средних значений:
Задача решена, все работает, но интересно, как та-же задача решается на других языках?
С++
Решение на C++ самое запутанное из всех. С помощью шаблонов мы создаем всю цепочку функций, которые суммируют свой первый аргумент, со вторым и так, пока в цепочке параметров не останется ничего. Классическая функциональщина, но только происходит она во время компиляции, а не при исполнении.Ну и победитель по простоте и лаконичности:
Комментарии
Отправить комментарий