키워드(Keywords)
키워드(Keywords)
키워드는 인터닝된 심볼처럼 동작하지만 출력 형태가 #:로 시작하고 식별자로는 쓸 수 없어요. 함수의 명명된 인자를 다룰 때 주로 만나게 됩니다.
출처: Racket Reference
본문
키워드에 대한 소개는 The Racket Guide의 Keywords에서 다룹니다.
키워드는 인터닝된 심볼(intermed symbol)과 비슷하지만, 출력 형태가 #:로 시작하고, 식별자로는 사용할 수 없습니다. 게다가 키워드 그 자체는 유효한 표현식이 아닙니다. 다만 키워드를 인용하면 그 심볼을 만들어내는 표현식이 됩니다.
두 키워드는 출력이 같을 때에만(즉, 키워드는 항상 인터닝되어) eq?입니다.
심볼과 마찬가지로 키워드는 내부 키워드 테이블에 약하게(weakly)만 유지됩니다. 자세한 내용은 Symbols를 참고하세요.
키워드 읽기에 대한 정보는 Reading Keywords, 키워드 출력에 대한 정보는 Printing Keywords를 참고하세요.
keyword?
procedure
(keyword? v) → boolean?
v : any/c
v가 키워드이면 #t, 그 외에는 #f를 반환합니다.
예시:
> (keyword? '#:apple)
#t
> (keyword? 'define)
#f
> (keyword? '#:define)
#t
keyword->string
procedure
(keyword->string keyword) → string?
keyword : keyword?
keyword의 표시(displayed) 형태에 대한 문자열을 반환하는데, 앞의 #:는 포함하지 않습니다.
racket/keyword의 keyword->immutable-string도 함께 보세요.
예시:
> (keyword->string '#:apple)
"apple"
string->keyword
procedure
(string->keyword str) → keyword?
str : string?
str의 표시 형태와 같지만 앞에 #:가 붙은 키워드를 반환합니다.
예시:
> (string->keyword "apple")
'#:apple
keyword<?
procedure
(keyword<? a-keyword b-keyword ...) → boolean?
a-keyword : keyword?
b-keyword : keyword?
인자들이 정렬되어 있으면 #t를 반환합니다. 키워드 쌍의 비교는 keyword->string을 string->bytes/utf-8과 bytes<?와 함께 사용하는 것과 같습니다.
예시:
> (keyword<? '#:apple '#:banana)
#t
package base의 7.0.0.13 버전에서 변경: 두 개 이상의 인자를 허용하는 것에 더해 하나의 인자도 허용합니다.
추가 키워드 함수
(require racket/keyword) ; package: base
이 절에서 문서화하는 바인딩은 racket/base나 racket이 아니라 racket/keyword 라이브러리가 제공합니다.
package base의 7.6 버전에서 추가되었습니다.
keyword->immutable-string
procedure
(keyword->immutable-string sym) → (and/c string? immutable?)
sym : keyword?
keyword->string과 같지만, 결과는 반드시 새로 할당될 필요가 없는 불변 문자열(immutable string)입니다.
예시:
> (keyword->immutable-string '#:apple)
"apple"
> (immutable? (keyword->immutable-string '#:apple))
#t
package base의 7.6 버전에서 추가되었습니다.