2015-07-23 5 views
1

Что происходит здесь:Clojure деструктурирующий возвращает странные вещи

(defn what [[a]] 
    (print a b)) 

теперь, если я называю (what "abid") я получаю:

a [1 2 3 4 5] 

Откуда это взялось? какие цифры?

+5

достаточно уверен, что вы тестируете в repl, и у вас есть «глобальный» _b_, установленный в [1 2 3 4 5]. если вы eval _b_ на вашем реплике не это '[1 2 3 4 5]'? –

+0

Согласен. Пространство имен, вероятно, «опробовано». – sloth

+1

Что значит «проголосовать»? – amirteymuri

ответ

0

Вы б определены точно, прежде чем определить эту функцию, в противном случае вы получите

CompilerException java.lang.RuntimeException: Unable to resolve symbol: b in this context, compiling:(NO_SOURCE_PATH:4:3) 

попробовать свой код в новом Clojure REPL с ничего в нем. И b является источником этих магических чисел.

т.д .:

(def b 5) 
(defn what [[a]] 
(print a b)) 
(what "abc") 
a 5nil 
0

Предполагая, что b определяется как [1 2 3 4 5] где-то, это работает точно, как я ожидаю, что это. Так как b иначе не указано в коде, который вы дали, мы можем только предположить, что это так.

a - первый элемент первого параметра, равный what. Для (what "abcd") это нижний регистр «a».

Смежные вопросы