언제 필요한가요?
한 계산이 서로 연관된 결과 여러 개를 자연스럽게 만들고 곧바로 정해진 소비자에게 넘길 때 다중 값을 사용하세요. 묶음을 데이터로 저장해야 한다면 리스트나 벡터가 맞습니다.
실행으로 확인하기
LISPEX
(call-with-values (lambda () (floor/ 17 5)) list)관측 결과
OUTPUT
(3 2)예제 읽기
floor/는 몫 3과 나머지 2를 두 값으로 냅니다. call-with-values가 이를 list의 두 인자로 넘기고, list가 일시적인 값 묶음을 저장 가능한 (3 2)로 바꿉니다.
이 순서로 생각하세요
- 단일 값 컨텍스트는 정확히 하나를 요구하며 0개 또는 2개 이상이면 E320입니다.
- 폐기 컨텍스트는 개수와 무관하게 받고
call-with-values는 생산자 패킷을 소비자 인자로 전달합니다. values의 각 피연산자 자체는 왼쪽부터 평가되는 단일 값 컨텍스트입니다.
빠르게 고르기
| 문맥 | 받는 값 개수 | 예 |
|---|---|---|
| 일반 피연산자나 바인딩 초기식 | 정확히 하나 | (+ (values 1) 2) |
begin의 마지막 전 폼 | 개수 무관, 버림 | (begin (values 1 2) 3) |
call-with-values 생산자 | 개수 무관 | (lambda () (values 1 2)) |
call-with-values 소비자 | 생산 개수를 받을 수 있어야 함 | (lambda (a b) ...) |
| 저장할 집합 | 리스트/벡터 값 하나 | (list 1 2) |
흔한 오해
다중 값은 리스트나 벡터로 박싱되지 않습니다.
현재 경계
- 한 값이 필요한 곳의
(values)는 미지정 센티널이 아니라 오류입니다.
다음으로
실용 가이드에서 생산자와 소비자를 만들고, 소비자 쪽 실패는 프로시저 인자 수에서 확인하세요.