답변:
이는 둘 이상의 바인딩이있을 때 변수가 순차적으로 바인딩되므로 각각이 바인딩되기 전에 바인딩 된 값, 즉 바인딩에서 앞에 오는 값에 바인딩 된 값에 의존 할 수 있음을 의미합니다 let*
.
의 경우 let
(별표), 바인딩의 아무도 (변수가 원칙적으로 병렬로 결합 될 수있는) 다른 사람의 전에 발생하는 것으로 가정 할 수 없습니다.
따라서 의 값에 (let ((a 42) (b a))...b)
바인딩하려고 시도하기 때문에 오류가 발생할 수 있으며 (적어도 이것에 바인딩 된 특정 ) 값에 바인딩 된 것으로 가정 할 수 없습니다.b
a
a
a
let
[일부 다른 변수 (예 : 전역) 변수 a
가 값 (예 :) 에 바인딩 된 5
경우 해당 let
표현식은 변수 (로컬) a
를 전역 값 ( 즉, ) 에 42
바인딩하고 바인딩 b
합니다 .]a
5
그러나에 바인딩 된 다음 의 값에 바인딩 되기 때문에 (let* ((a 42) (b a))...b)
반환 됩니다.42
a
42
b
a
Elisp 매뉴얼, 노드 로컬 변수를 참조하십시오 .
댓글에서 @ DoMiNeLa10의 알림에서 업데이트 :
매뉴얼 외에도 help 명령을 사용할 수 있습니다 . "이맥스를 구하는" 모든 다양한 방법 중에서 가장 먼저 배우고 가장 유용한 방법 중 하나입니다.
그리고 대한은 C-h f let*
간결하게, 우리에게 알려줍니다 :Each VALUEFORM can refer to the symbols already bound by this VARLIST.
여기서 질문하는 데 아무런 문제가 없지만 Emacs에 그러한 질문을 한다면 자신 에게 호의를 베풀 것 입니다. 그냥 사용 , 매뉴얼의 정보 브라우저를 열려면 선택 매뉴얼 및 사용 조회 (완공) 인덱스에. 이를 다루는 노드로 직접 이동합니다.C-h i
Elisp
i let*
let*
(그리고 수천 명의 기고자들이 많은 시간과 노력을 쏟아 부어 정확하고 완전하게 해왔 기 때문에이 매뉴얼은 일반적으로 여기에서 할 수있는 것보다 더 나은 것을 다루고 있습니다.)
또한 사용 태그이 질문과 답변이 사이트를 검색 할 수 있습니다 let-binding
: 그냥 넣어 [let-binding]
검색 필드에. (이 질문이 중복인지 확인하기 위해 지금 할 것입니다 ...)
F1 f
.
b
이는 글로벌에 바인드되어 5와 같습니다a
.let
대신 읽어야 합니다let*