네 가지 방식의 Clojure 기능

1977 단어
Perl은 TMTOWTDI를 만들었지만(이를 수행하는 방법은 여러 가지가 있습니다.) Clojure는 그 아이디어를 채택하고 매우 멀리 실행합니다.

오늘은 Clojure에서 함수를 생성하는 4가지 방법을 빠르게 보여드리고자 합니다.

코드의 각 블록은 주어진 정수 인수를 단순히 두 배로 만드는 doubler 함수를 정의합니다.

데프



이것은 본질적으로 Clojure에서 함수를 정의하는 표준 방법입니다: name, args, function body.

(defn doubler [n] (* 2 n))


def와 fn




(def doubler (fn [n] (* 2 n)))


이것은 defn의 장황한 변형이며 본질적으로 defn가 무대 뒤에서 하는 일입니다. 여기에 익명 함수(fn가 있는 이름에 바인딩된 def )가 있습니다.

함수 리터럴



또한 Clojure는 fn 보다 더 짧은 구문으로 함수를 정의할 수 있습니다. # 문자는 함수 리터럴을 정의할 수 있습니다. 이 구문을 사용하면 명명된 인수를 가질 수 없지만 대신 위치 참조를 얻을 수 있습니다. %1 %2 %3
(def doubler3 #(* 2 %1))


부분 사용



이제 흥미로워집니다. Clojure는 가장 훌륭하고 뛰어난partial 기능을 제공합니다. partial 함수는 함수와 일부 인수를 수락하고 원래 제공된 인수와 나머지 필수 인수를 사용하여 원래 함수를 호출하는 새 함수를 반환합니다.

아 설명이 어려워서 보여드리겠습니다. doubler 를 사용하는 partial 입니다.

(def doubler (partial * 2))


무슨 일이?
def doubler는 단순히 이름을 지정하는 것이므로 무시합시다.

진짜 흥미로운 부분

(partial * 2)

partial에 대한 호출은 함수*와 인수2를 허용하고 (* 2) 호출에 제공하기 위해 더 많은 인수를 허용하는 새 함수를 반환합니다.

새 함수는 주어진 모든 인수를 가져와 우리가 직접 호출한 것처럼 (* 2)에 제공합니다.

(def doubler (partial * 2))

(doubler 10) ; => 20 == (* 2 10)
(doubler 3 4) ; => 24 == (* 2 3 4)


여러 인수를 취한다는 점에서 처음 두 함수doubler와 완전히 같지 않다는 것을 알 수 있습니다. 이것이 partial의 힘과 유연성입니다.

좋은 웹페이지 즐겨찾기