2015-03-17 2 views
0

Когда у меня есть 3 функции в программе, как я могу проверить конкретное имя функции? Я хочу знать название этой функции для выбора функции.Проверка функции Clojure

Пусть функция линейного ядра, функция логистического ядра и неотрицательная функция, когда я вызываю программу, вызывается одна из этих функций, и я должен проверить, была ли она линейной, логистической или неотрицательной функцией , поэтому я могу выполнить другую функцию, связанную с выбранной функцией.

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

FYI, на этом уровне, я уже используют «мета» ключевое слово, чтобы получить доступ к имени функции, но когда я создаю

(defn isKernel [krn] 
    (if (= (str (:name (meta #'krn))) "logistic-kernel") 1 0)) 

компилятор не может разрешить «KRN» Var

+3

Почему бы просто не сделать '(= krn logistic-kernel)'? – cgrand

ответ

0

В Clojure функции - значения, как и число 4. Это большая часть основ большей части языка (и функционального программирования в целом). Большую часть времени мы храним функции в vars, хотя это не требуется. функции как значения не имеют имен * Поэтому вместо проверки того, соответствует ли имя переданной функции известному имени, имеет смысл задавать вопрос: «выполняет ли эта функция то же значение, что и функция, хранящаяся в var ", как указывает @cgrand, это может быть выполнено просто путем вызова =.

Если вы делаете этот вид отправки есть хорошее изменение, которое protocols являются лучшим инструментом, чем прокаток своего собственного

* они имеют имена с целью создания рекурсивных функций литералов, хотя это еще не то, что я м получить здесь.

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