передача функций в качестве аргументов в clojure
у меня есть функция, которая принимает функцию и число и возвращает его применение функции на число, а функция Куба:
(defn something [fn x]
(fn x))
(defn cube [x]
(* x x x))
когда я вызываю функцию следующим образом это работает:
(something cube 4)
но это возвращает сообщение об ошибке:
(something Math/sin 3.14)
, работает:
(something #(Math/sin %) 3.14)
каково объяснение?
1 ответов
Math.sin
- Это не функция! Это метод прямо из Java и не понимает различных правил, которым должны следовать функции Clojure. Если вы обернете его в функцию, то эта функция может действовать как прокси, передавая аргументы "тупому" методу и возвращая результаты в ваш "умный" функционально-ориентированный контекст.