Я предполагаю, что вы хотели вызвать map!(a => a.repeat(2))(list)
или list.map!(a=>a.repeat(2))
(оба одинаковы), поскольку, если вы не передадите фактический список функции, он никогда не будет вызван!
В любом случае, ни карта, ни уменьшение не будут делать то, что вы хотите сами.Карта преобразует отдельные элементы, но не может ни добавлять, ни удалять элементы.Reduce (и, между прочим, они в основном одинаковые) проходит через массив и ... ну, сводит его к одному элементу, подобно функции sum, превращающей массив 1,2,3 в один элемент, 6.вы хотите добавить элементы, вам понадобится что-то еще снаружи.
Но сначала отступление: ваш призыв к сокращению не скомпилируется, потому что ему передаются неверные аргументы (или что-то подобное, сообщения об ошибкахдействительно плохи и их трудно читать, не имея кода, на который они ссылаются напрямую, но это определенно относится к лямбде).Передав это, ваш dupList
не будет работать, потому что dupList
принимает массив, но сокращение работает только с двумя элементами одновременно, например, sum(a, b)
.
В любом случае, вернемся к основной точке,самое близкое, что вы можете получить, это, возможно, запустить другую функцию вне карты, чтобы сгладить результирующий массив, или, другими словами, объединить их вместе.Для этого есть функция: http://dpldocs.info/experimental-docs/std.algorithm.iteration.joiner.2.html
Предложить возможный ответ:
return list .map!(a => a.repeat(2)) .joiner;
Кстати: однострочные функции сильно переоценены.Вам часто лучше писать это в несколько строк, даже если это одно утверждение, если не что иное, как так, вы можете получить уникальные номера строк в сообщениях об ошибках.Я бы предпочел записать это, вероятно, что-то вроде этого:
return
list
.map!(a => a.repeat(2))
.joiner
;
, поэтому каждая строка представляет один шаг процесса.Точное форматирование, конечно, зависит от вас, но мне нравится этот более расширенный подход для (немного) более хороших сообщений об ошибках и более простое представление при редактировании, чтобы добавлять комментарии или больше материала до, после, в середине, что угодно.