는 어떻게 현재 범위에서 그 가치와 기호 x
을 대체 할 수 있습니까? 내가 생각할 수있는람다 식의 따옴표를 사용하지 않으시겠습니까?</p> <pre><code>(lambda() x) </code></pre> <p>같은 익명 함수에서
있는 유일한 방법은
(eval `(lambda() ,x))
하지만 다른 방법이 있는지 궁금하다.
는 어떻게 현재 범위에서 그 가치와 기호 x
을 대체 할 수 있습니까? 내가 생각할 수있는람다 식의 따옴표를 사용하지 않으시겠습니까?</p> <pre><code>(lambda() x) </code></pre> <p>같은 익명 함수에서
있는 유일한 방법은
(eval `(lambda() ,x))
하지만 다른 방법이 있는지 궁금하다.
eval
을 제거하십시오. 그냥 `(lambda() ,x)
입니다. 리스트 VAL-X
x
변수의 값이다(lambda() VAL-X)
를 반환
. 그리고 람다리스트는 Emacs에 의해 함수로 해석된다.
더 나은 솔루션은 파일의 시작 부분에
;; -*- lexical-binding:t -*-
를 추가하는 것입니다. 이 작업을 마치면, (lambda() x)
을 쓰는 것만으로 끝난다. Emacs는 그 람다 주변의 값으로부터 x
을 바꾼다 (즉, 적절한 닫힘을 만들 것이다).
문제는 항상 그렇게 할 수 없다는 것입니다. 예를 들어, 어휘 바인딩을 사용하지 않는 라이브러리를 확장한다고 가정 해보십시오. –
파일을'lexical-binding'으로 변환하는 것은 항상 쉽고, 보통 쉽습니다. – Stefan
'x'가'(1 2)'와 같은 값을 갖는다면 이것은 행복하게 트림됩니다. – Stefan
@Stefan : 가능한 한 OP에 가까이 다가려고 노력했습니다. 그리고 이것은'(람다() (1 2))'를 반환합니다 - 트림이 없습니다. 호출 할 때 * 함수가 트림하는 것을 의미하면 다른 문제입니다 (OP에도 적용됩니다). 'x'가 에러없이 평가 될 수없는 어떤 것이라면''x''가 보통 적절합니다. – Drew