Если вы просто хотите создать псевдоним для существующей функции, функция упаковщик все, что вам нужно:
> (ns clj (:import [java.net URL]))
> (def url (URL. "http://www.google.com"))
> (defn host [arg] (.getHost arg))
> (host url)
;=> "www.google.com"
В то время как вы могли бы использовать memfn
как указывает другому пользователю, кажется менее очевидным, что происходит. В самом деле, даже clojure.org теперь рекомендует против него:
https://clojure.org/reference/java_interop
(memfn method-name arg-names)*
Macro. Расширяется в код, который создает fn, который ожидает , передает объект и любые аргументы и вызывает метод именованного экземпляра на объект, передающий аргументы. Используйте, если хотите обработать Java-метод как первоклассный fn.
(map (memfn charAt i) ["fred" "ethel" "lucy"] [1 2 3])
-> (\r \h \y)
Примечание почти всегда предпочтительнее делать это прямо сейчас, с синтаксисом, как:
(map #(.charAt %1 %2) ["fred" "ethel" "lucy"] [1 2 3])
-> (\r \h \y)
Поскольку '' .getHost' не является «цитируемым методом» для начала, вы не можете его исключить. Это просто символ. Кроме того, вы, похоже, уже разработали способ оценки вашего символа в вызове метода, так что в чем вопрос? –
Эта последняя строка испугала меня хорошо! Счастливого Хэллоуина! –