함수 호출, 매크로 호출, 특수 형식
앞에서 함수 호출하는 법을 보았다(함수 식을 연산자로 하는 식). 이와 다른 두 가지 형태로는
매크로 호출(macro call)과
특수 형식(special form)이 있다. 일단 다른 이야기보다 함수에 대해 더 다뤄보자.
(defn no-params
[]
"I take no parameters!")
(defn one-param
[x]
(str "I take one paramter: " x))
(defn two-params
[x y]
(str "Two parameters! That's nothing! Pah! I will smooth them "
"together to spite you! " x y))
매개변수가 0인 것, 1개인 것, 2개인 것을 나열했다. 클로저의 함수는 개수 덧쓰기(arity overloading)를 지원한다. 즉, 인자 개수에 따라 서로 다른 함수 몸체가 실행되는 함수를 만들 수 있다는 것이다.
(defn multi-arity
;; 3개의 인자와 함수 몸체
([first-arg second-arg third-arg]
(do-things first-arg second-arg third-arg))
;; 2개
([first-arg second-arg]
(do-things first-arg second-arg))
;; 1
([first-arg]
(do-things first-arg)))
한번 만들어보자.
(defn slap ([name sound]
(str name "에게 뺨을 때렸더니? " sound "! 소리가 났다."))
([name]
(str name "에게 뺨을 딱!")))
> (slap "you")
"you에게 뺨을 딱!"
> (slap "you" "BBAK!")
"you에게 뺨을 때렸더니? BBAK!! 소리가 났다."
느낌이 오는가?? 그냥 오버로딩 한다 생각하고 괄호로 만들면 된다.
댓글 없음:
댓글 쓰기