2014-09-24 3 views
1

Я работаю над небольшим проектом животного в Clojure. У меня есть функция, я прохожу: с переменным числом аргументовClojure: Преобразование Varargs Но Сохранение их Varargs

(defn foor [bar & args] 
    (let new-args (custom-transform args)] 
    (do-something new-args)))))) 

Но, do-something ожидает, а не списков параметров объекта списка. В custom-transform

(defn custom-transform [& args] 
    (if vars vars nil)) 

Как сохранить «vararg» -iness моих аргументов после применения преобразования?

+0

Возможный дубликат [Передача списка переменных по отдельности для функции clojure] (http://stackoverflow.com/questions/8523254/passing-list-of-variables-individually-to-clojure-function) – Mark

+0

Возможный дубликат [ Clojure: как сохранить Variadic Args между функциональными вызовами] (http://stackoverflow.com/questions/26061503/clojure-how-to-preserve-variadic-args-between-function-calls) –

ответ

1

Я думаю, что применять следует сделать трюк:

(apply do-something new-args) 

Ваша проблема не является специфической для списков параметров. То, что вы хотите сделать, - вызвать do-something, передав элементы массива в качестве аргументов функции. Это происходит именно то, что делает apply.

+0

Да, это сделал трюк. Спасибо. Мне нужно подождать 1 минуту, чтобы принять –

+0

Btw, спасибо за решение, можете ли вы объяснить, почему это работает? В чем причина? –

+2

-1 Этот вопрос задавался тысячу раз, и все же люди спрашивают об этом, а кто-то задает один ответ о 'apply'. Я не понимаю. Примеры: [this] (http://stackoverflow.com/questions/25621696/how-to-use-list-as-parameters) и [это] (http://stackoverflow.com/questions/8523254/passing-list -of-variables-individual-to-clojure-function) (это самый старый вопрос такого рода). – Mark