попробуйте несколько вызовов функции "type":
user=> (type 10)
java.lang.Integer
user=> (type 10.0)
java.lang.Double
user=> (type :keyword?)
clojure.lang.Keyword
и теперь с анонимной функцией:
user=> (type #(str "wonder" "what" "this" "is"))
user$eval7$fn__8
A) Что это значит "user $eval7 $fn__8"? B) и какой тип является функцией?
источник для "type":
user=> (source type)
(defn type
"Returns the :type metadata of x, or its Class if none"
{:added "1.0"}
[x]
(or (:type (meta x)) (class x)))
nil
поэтому функция должна иметь определенную часть метаданных или быть классом
проверка мета анонимной функции дает nada:
user=> (meta #(str "wonder" "what" "this" "is"))
nil
пытается использовать другой подход:
user=> (defn woot [] (str "wonder" "what" "this" "is"))
#'user/woot
user=> (meta woot)
{:ns #<Namespace user>, :name woot}
C) кажется, что есть какая-то мета, но я понял, что это мета символа "woot", правильно?
как насчет второй половины "или":
user=> (class #(str "wonder" "what" "this" "is"))
user$eval31$fn__32
user=> (class woot)
user$woot
что это такое: "user $eval31 $fn__32" и "user $woot" и откуда они взялись?
проверка функции "class" дает:
user=> (source class)
(defn ^Class class
"Returns the Class of x"
{:added "1.0"}
[^Object x] (if (nil? x) x (. x (getClass))))
nil
и дальнейшее исследование выходов:
user=> (.getClass #(str "wonder" "what" "this" "is"))
user$eval38$fn__39
user=> (.getClass woot)
user$woot
Я не понимаю. D) - это хэш-код: eval38 $fn__39? E) - это символ: woot?
F) Почему функция не имеет тип? разве это не должно быть IFn или что-то в этом роде?