2013-03-02 2 views
0

여러 글로벌 변수 중 하나 (이 경우 global-mark-list, 버퍼 마크 목록 또는 임의의 마크 목록) 중 하나에서 작동하려는 함수를 작성하고 있습니다. 함수는 tabulated-menu 함수에서 호출되므로 나중에 액세스 할 수 있도록 버퍼 로컬 변수에 참조를 숨겨야합니다.elisp에서 변수에 대한 참조를 어떻게 처리합니까?

이 문제를 해결하는 가장 좋은 방법은 무엇입니까? 설명서를 살펴보면 defvaralias 및 indirect-variable에 대한 언급이 있지만 임시 참조가 아닌 영구 전역 별칭이 더 많이 설정되어있는 것으로 보입니다. 이것이 아주 쉬워야 함을 의미하는 약간의 혀짤배기가 빠졌습니까?

+0

나는이 생각을 과장하여 단순히 목록을 참조 할 수있는 것 같습니다. – stsquad

답변

3

변수 이름을 기호로 저장하고 symbol-value 또는 eval을 사용하십시오.

많은 동적 언어가 eval입니다.

+0

'eval' 대신'symbol-value'를 쓸 수 있다면'eval'을 사용하지 마십시오. 당신이 숟가락으로 잘 할 수 있다면 불도저로하지 말아라. – Stefan

+0

변수가 가리키는 실제 값을 변경하려면 어떻게해야합니까? – stsquad

+0

당신은'set'을 사용합니다 ... –

2

이맥스의 트렁크에서 당신은 또한 C의 &* 각각 유사하게 작동 gv-refgv-deref을 사용할 수있다 (24.4 될 수 있습니다).

+0

24.4에서 새로운 방법을 소개 한 이유는 무엇입니까? 특히 이것을 달성 할 수있는 방법이 있다면? – stsquad

+1

@stsquad이 함수는 "일반화 된 변수"와 함께 작동하여 기호의 변수 셀뿐만 아니라 임의의 저장 위치에 액세스하고 조작합니다. 본질적으로이 함수들은 CL 구조 나 EIEIO 객체를 포함 해 임의의 타입을 지원하기 위해'setf'와 관련 함수를 일반화합니다. – lunaryorn

+0

'gv- (de) ref '를 추가 할 동기가 여러 가지 있습니다. 하나의 이유는 변수뿐 아니라 일반화 된 변수 * (일명 * 값 또는 설정 가능 필드)에서 작동한다는 것입니다. 또 다른 하나는'set'입니다. 'symbol-value'는 동적 범위 변수에서만 작동하지만 어휘 범위 변수에서는 작동하지 않습니다. – Stefan

관련 문제